• YARN和MapReduce的内存设置参考


    如何确定Yarn中容器Container,Mapreduce相关参数的内存设置,对于初始集群,由于不知道集群的类型(如cpu密集、内存密集)我们需要根据经验提供给我们一个参考配置值,来作为基础的配置。

    完成这一任务有两种方式,确定YARN和MapReduce的内存设置,我们可以使用HDP工具脚本进行内存配置设定

    运行hdp-configuration-utils.py 这个Python脚本(下载地址:hdp-configuration-utils来计算YARN、MapReduce需要的内存,执行以下命令

    python hdp-configuration-utils.py options

    其中可选项如下:

    选项

    描述

    -c CORES

    每一个客户机的核数目

    -m MEMORY

    每一个客户机拥有的内存总数

    -d DISK

    每一个客户机拥有的磁盘数目

    -k HBASE

    如果Hbase安装了为”True”,否则为”False”

    注:需要python26的运行环境

    我们可以使用-h或-help来显示描述选项的帮助信息。

    例子

    运行下面的命令

    python hdp-configuration-utils.py -c 16 -m 64 -d 4 -k True

    结果如下:

    1.png

    手动计算YARN和MapReduce内存配置设置

    接下来我们将描述如何基于特定的硬件,手工的设置YARN和MapReduce内存。

    YARN可以考虑集群中所有节点的可用的计算机资源。基于可用的资源,YARN会沟通协调应用程序(如:mapReduce)需要的资源。YARN会为每一个应用提供相应的容器Container。容器Container是YARN的基本处理单元,是内存和CPU资源的一种封装。

    在Hadoop集群中,平衡内存RAM、处理器cpu和磁盘的使用是非常重要的。作为一般的推荐,为每个磁盘和每个核分配两个容器,为集群的利用率提供了最好的平衡。

    当为一个集群决定合适的YARN和MapReduce内存设置时,从可用的硬件资源开始,注意每个节点的以下值:

    RAM(内存的数量)

    CORES(CPU的核数)

    DISKS(磁盘的数目)

    整个针对YARN和MapReduce可用的RAM数,应该考虑预留的内存。预留的内存主要用于系统进程占用和其它Hadoop进程(如Hbase)。

    预留的内存=保留栈内存+Hbase预留内存(如果Hbase是部署在同一台机器上)

     

    我们通常会使用下表来决定预留内存的大小

    每个节点的总内存

    推荐系统保留的内存

    推荐为hbase保留的内存

    4GB

    1GB

    1GB

    8GB

    2GB

    1GB

    16GB

    2GB

    2GB

    24GB

    4GB

    4GB

    48GB

    6GB

    8GB

    64GB

    8GB

    8GB

    72GB

    8GB

    8GB

    96GB

    12GB

    16GB

    128GB

    24GB

    24GB

    256GB

    32GB

    32GB

    512GB

    64GB

    64GB

    接下来我们计算决定每个节点允许的最大容器的数目,我们可以使用下列公式:

    containers = min (2*CORES, 1.8*DISKS, (Total available RAM) /MIN_CONTAINER_SIZE)

    其中DISKS是参数每台机器中dfs.data.dirs参数的数目值。MIN_CONTAINER_SIZE是最小的容器大小(RAM)。这个值是依赖于RAM的可用数目——小的内存节点,最小的容器大小应该更小。

    容器推荐值

    每个节点的总内存

    推荐的最小容器大小

    小于4GB

    256MB

    在4GB和8GB之间

    512MB

    在8GB和24GB

    1024MB

    大于24GB

    20148MB

    最终的计算结果决定了每个容器的RAM的数目。

    RAM-per-container = max(MIN_CONTAINER_SIZE, (Total Available RAM) / containers))

    因为这些计算,YARN和MapReduce设置如下

    配置文件

    配置设定

    计算值

    Yarn-site.xml

    yarn.nodemanager.resource.memorymb

    =containers*RAM-per-container

    Yarn-site.xml

    yarn.scheduler.minimum-allocationmb

    = RAM-per-container

    yarn-site.xml

    yarn.scheduler.maximum-allocationmb

    =containers*RAM-per-container

    mapred-site.xml

    mapreduce.map.memory.mb

    = RAM-per-container

    mapred-site.xml

    mapreduce.reduce.memory.mb

    = 2 * RAM-per-container

    mapred-site.xml

    mapreduce.map.java.opts

    = 0.8 * RAM-per-container

    mapred-site.xml

    mapreduce.reduce.java.opts

    = 0.8 * 2 * RAM-per-container

    mapred-site.xml

    yarn.app.mapreduce.am.resource.mb

    = 2 * RAM-per-container

    mapred-site.xml

    yarn.app.mapreduce.am.commandopts

    = 0.8 * 2 * RAM-per-container

    注:在安装好后,yarn-site.xml and mapred-site.xml位于文件夹/etc/Hadoop/conf目录

     

    举例说明:

    集群节点拥有12个CPU核,48GB内存和12块磁盘

    保留内存(Reserved Memory)=6GB系统预留内存+(如果有Hbase)8GB的Hbase内存

    最小的容器大小(Min container size)=2GB

    含有的容器数(containers)=min(2*12,1.8*12,(48-6)/2)=min(24,21.6,21)=21

    每个容器的RAM(RAM-per-container)=max(2,(48-6)/21)=max(2,2)=2

    根据上述例子计算出来的值

    配置

    计算值

    yarn.nodemanager.resource.memory-mb

    = 21 * 2 = 42*1024 MB

    yarn.scheduler.minimum-allocation-mb

    = 2*1024 MB

    yarn.scheduler.maximum-allocation-mb

    = 21 * 2 = 42*1024 MB

    mapreduce.map.memory.mb

    = 2*1024 MB

    mapreduce.reduce.memory.mb

    = 2 * 2 = 4*1024 MB

    mapreduce.map.java.opts

    = 0.8 * 2 = 1.6*1024 MB

    mapreduce.reduce.java.opts

    = 2 * 2 = 4*1024 MB

    yarn.app.mapreduce.am.command-opts

    = 0.8 * 2 * 2 = 3.2*1024 MB

    如果部署了HBase

    容器数目(containers)=min(2*12,1.8*12,(48-6-8)/2)=min(24,21.6,17)=17

    每个容器的RAM(RAM-per-container)=max(2,(48-6-8)/17)=max(2,2)=2

     根据此时的值计算出来的值

    配置

    计算值

    yarn.nodemanager.resource.memory-mb

    =17*2=34*1024MB

    yarn.scheduler.minimum-allocation-mb

    = 2*1024 MB

    yarn.scheduler.maximum-allocation-mb

    = 17 * 2 = 34*1024 MB

    mapreduce.map.memory.mb

    = 2*1024 MB

    mapreduce.reduce.memory.mb

    = 2 * 2 = 4*1024 MB

    mapreduce.map.java.opts

    = 0.8 * 2 = 1.6*1024 MB

    mapreduce.reduce.java.opts

    = 0.8 * 2 * 2 = 3.2*1024 MB

    yarn.app.mapreduce.am.resource.mb

    = 2 * 2 = 4*1024 MB

    yarn.app.mapreduce.am.command-opts

    = 0.8 * 2 * 2 = 3.2*1024 MB

    备注:

    1.更新属性值yarn.scheduler.minimum-allocation-mb要同时更新

    yarn.nodemanager.resource.memory-mb

    yarn.scheduler.minimum-allocation-mb

    导致每个节点容器数目的改变。

     

    2.如果你安装拥有很大数目的内存,而缺少磁盘和CPU核,你可以将内存释放给其它的任务,降低参数yarn.scheduler.minimum-allocation-mb

     andyarn.nodemanager.resource.memory-mb的值

     

    3.当前在YARN上运行MapReduce时。我们不在会去设置静态的Map和Reduce任务。整个集群将根据Job的需要动态的分配Map和Reduce任务。在我们的集群中,YARN可以在每个节点上分配10个Map和5个Reduce。

     

    设置NameNode的对内存大小

    NameNode的堆大小受很多的因数影响如文件的数目,块的数目和系统的负载。下面的表格提供了NameNode对大小的设定。这些设定经常用于典型的Hadoop集群,其中块的数目和文件的数目十分接近(一般而言,系统中平均每个文件的块数比例大概在1.1到1.2),总的来说将NameNode的堆内存设置的越大越好。

    文件的数目(百万)

    整个java的堆(Xmx和Xms)

    年轻代大小

    (-XX:NewSize-XX:MaxNewSize)

    <1 million files

    1024m

    128m

    1-5million files

    3072m

    512m

    5-10

    5376m

    768m

    10-20

    9984m

    1280m

    20-30

    14848m

    2048m

    30-40

    19456m

    2560m

    40-50

    24320m

    3072m

    50-70

    33536m

    4352m

    70-100

    47872m

    6144m

    100-125

    71424m

    8960m

    150-200

    94976m

    8960m

    我们应该设置-XX:PermSize为128m –XX:maxPermSize为256m

    下面是对Hadoop_NameNode_Opts参数的推荐设置,在配置文件hadoop-env.sh中(将下面的####替换成-XX:NewSize,-XX:MaxNewSize,-Xms,和-Xmx可以用上上面表中推荐的值)

    2.png

    -XX:+HeapDumpOnOutOfMemoryError这个参数指明了当内存错误出现时,堆的dump操作将会被执行。你也可以使用-XX:HeapDumpPath来指定heap dump文件的位置,如:另外一个有用的HADOOP_NAMENODE_OPTS参数是

    -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./etc/heapdump.hprof


    参考:http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.1.1/bk_installing_manually_book/content/rpm-chap1-11.html

               http://blog.csdn.net/suifeng3051/article/details/45477773

  • 相关阅读:
    Ext.Msg.alert要注意的问题
    项目终于到了可以轻松下的时候,^_^
    Ext最佳应用
    Google居然无视中国人民的感情
    google的logo居然还是鲜艳色的!!!(下午已经是黑的了,还是感谢google)
    我们必须支持国产,这是义务
    管理软件更需要Open Social
    设计模式外观模式(Facade)
    设计模式代理模式(Proxy)
    设计模式桥接模式(Bridge)
  • 原文地址:https://www.cnblogs.com/dailidong/p/7571116.html
Copyright © 2020-2023  润新知