[Hadoop]-调优篇-YARN

YARN作为资源调度管理组件,对YARN的的优化主要呈现在CPU和内存两方面

1.内存篇

  在YARN集群中,平衡内存,CPU和磁盘的资源是比较重要的.一般来说,每两个Container使用一块磁盘和一个CPU核可以是使资源得到比较充分的利用

  对YARN而言的内存可用资源,是指在排除操作系统或其它应用程序占用之外剩下的部分,才是可用资源

  可以参考如下表格:

每台机器的内存系统需要的内存HBASE需要的内存
4G1G1G
8GB2G1G
16G2G2G
24G4G4G
48G6G8G
64G8G8G
72G8G8G
96GB12GB16GB
128GB24GB24GB
255GB32GB32GB
512GB64GB64GB

  计算每台机器最多可以拥有多少个Container,可以使用下面的公式:

    containers = min (2*机器CPU核数, 1.8*机器上挂载的磁盘个数, (机器总内存) / MIN_CONTAINER_SIZE)

    说明: MIN_CONTAINER_SIZE是指container最小的容量大小,这需要根据具体情况去设置,可以参考下面的表格  

每台机器可用的内存Container最小值
小于4GB256MB
4GB到8GB之间512MB
8GB到24GB之间1024MB
大于24GB2048MB

  根据上面的计算后,YARN和MapReduce的资源最终可以这样设置

配置文件配置设置默认值计算值
yarn-site.xmlyarn.nodemanager.resource.memory-mb8192 MB= containers * RAM-per-container
yarn-site.xmlyarn.scheduler.minimum-allocation-mb1024MB= RAM-per-container
yarn-site.xmlyarn.scheduler.maximum-allocation-mb8192 MB= containers * RAM-per-container
yarn-site.xml (check)yarn.app.mapreduce.am.resource.mb1536 MB= 2 * RAM-per-container
yarn-site.xml (check)yarn.app.mapreduce.am.command-opts-Xmx1024m= 0.8 * 2 * RAM-per-container
mapred-site.xmlmapreduce.map.memory.mb1024 MB= RAM-per-container
mapred-site.xmlmapreduce.reduce.memory.mb1024 MB= 2 * RAM-per-container
mapred-site.xmlmapreduce.map.java.opts = 0.8 * RAM-per-container
mapred-site.xmlmapreduce.reduce.java.opts = 0.8 * 2 * RAM-per-container

  举个例子:  一台机器,128G内存、32核CPU的机器,挂载了7个磁盘

         根据上面的图表,系统保留内存为24G,在不使用HBASE的情况下,可以认为YARN的可用资源为104G

         可用资源104G,计算Container最大值为13个 <= min (2*32, 1.8* 7 , (128-24)/2) = min (64, 12.6 , 51) = 13

       每个Container平均内存大小为8G <=max (2, (124-24)/13) = max (2, 8) = 8

       可以支持平均8G,明显有点偏大(浪费)了,既然可以支持到平均8G,那就继续设置,降为2G,这样可以产生的更多的Container

配置文件配置设置计算值
yarn-site.xmlyarn.nodemanager.resource.memory-mb= 52 * 2 =104 G
yarn-site.xmlyarn.scheduler.minimum-allocation-mb= 2G
yarn-site.xmlyarn.scheduler.maximum-allocation-mb= 52 * 2 = 104G
yarn-site.xml (check)yarn.app.mapreduce.am.resource.mb= 2 * 2=4G
yarn-site.xml (check)yarn.app.mapreduce.am.command-opts= 0.8 * 2 * 2=3.2G
mapred-site.xmlmapreduce.map.memory.mb= 2G
mapred-site.xmlmapreduce.reduce.memory.mb= 2 * 2=4G
mapred-site.xmlmapreduce.map.java.opts= 0.8 * 2=1.6G
mapred-site.xmlmapreduce.reduce.java.opts= 0.8 * 2 * 2=3.2G

        另外还有几个参数:

          yarn.nodemanager.vmem-pmem-ratio:任务每使用1MB物理内存,最多可使用虚拟内存量,默认是2.1

          yarn.nodemanager.pmem-check-enabled:是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true

          yarn.nodemanager.vmem-pmem-ratio:是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true

          第一个参数的意思是当一个map任务总共分配的物理内存为2G的时候,该任务的container最多内分配的堆内存为1.6G,可以分配的虚拟内存上限为2*2.1=4.2G。

          照这样算下去,每个节点上YARN可以启动的Map数为104/2=52个

2.CPU篇

  相较内存的设置,CPU的要简单的多.因为YARN中引入了一个虚拟CPU的概念,YARN中的核都是指虚拟CPU.它的设计初衷是表述不同的CPU之间的计算能力差异.

  比如一个高性能CPU的计算能力是另一种便宜版的两倍,就可以在高性能这边设置1:2的物理虚拟核比.

  YARN的CPU设置如下:

    yarn.nodemanager.resource.cpu-vcores:表示该节点上YARN可使用的虚拟CPU个数,默认是8.

                        注意,目前推荐将该值设值为与物理CPU核数数目相同。如果你的节点CPU核数不够8个,则需要调减小这个值,而YARN不会智能的探测节点的物理CPU总数

    yarn.scheduler.minimum-allocation-vcores:单个任务可申请的最小虚拟CPU个数,默认是1,如果一个任务申请的CPU个数少于该数,则该对应的值改为这个数

    yarn.scheduler.maximum-allocation-vcores:单个任务可申请的最多虚拟CPU个数,默认是32

  这些默认值在实际生产集群中是不合适,生产集群一般都是高核服务器,这里应该以自己的集群重新调试参数.(比如一般的32核服务器,就要设置为31核,留一个操作系统)

 

3.调度器优化

  详见 YARN调度器篇

 

  参考: http://blog.itpub.net/30089851/viewspace-2127851/

转载于:https://www.cnblogs.com/NightPxy/p/9212430.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值