Hadoop的资源调器-----Yarn的优化

理论基础

1、概述
    一般说yarn的调优,就是指Container的调优,而Container是运行在NM节点上的,而在NM的节点,一
般还运行着DN进程(数据本地化),DN+NM两进程不可占据节点的全部内存,一般在75%~85%(不考虑hbase)之
间比较合适,对于一台64G内存的机器,生产上可使得DN+NM=54G,DN=4G,NM=50G。
    ####hbase内存一般和给系统预留的内存一样大。
    两个container使用一块磁盘以及一个CPU核的时候可以使集群的资源得到一个比较好的利用。

#####以下调优,没说生产调则在生产上不要动

2、内存调优

A)yarn.nodemanager.resource.memory-mb     
    NM占用机器的内存大小,单位MB   可设置为50*1024 (生产调)

B)yarn.scheduler.minimum-allocation-mb        
    Container包含的最小内存,单位MB  可设置1024(生产调)

C)yarn.scheduler.maximum-allocation-mb        
    Container包含的最大内存,单位MB  可设置8192(生产调)

注:
    随着任务的运行,计算越来越大,任务消耗的资源越来越多,Container包含的内存也应该逐渐增加,在
CDH版本的hadoop中有一个参数可以设置每次内存加大的额度,当内存达到yarn.scheduler.maximum-
allocation-mb参数设置的最大内存还不够时,任务会被yarn杀掉

D)yarn.scheduler.increment-allocation-mb     
    Container内存不够用时一次性加多少内存 单位MB 可设置2048(仅CDH)

E)yarn.nodemanager.pmem-check-enabled    
    容器是否会执行物理内存限制     默认为True 
    执行物理内存限制时,当Container达到最大物理内存限制时,该参数为True时,会杀死任务

F)yarn.nodemanager.vmem-check-enabled     
    容器是否会执行虚拟内存限制    默认为True
    执行虚拟限制时,当Container达到最大物理虚拟限制时,该参数为True时,会杀死任务

G)yarn.nodemanager.vmem-pmem-ratio  
    使用虚拟内存和物理内存的比值     默认为2.1

3、虚拟内存调优
vm.swappiness 的值介于0到100之间
    swappiness=0的时候表示最大限度使用物理内存,然后才是swap空间。
    swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。        
    linux的基本默认设置为60。

    当任务处于高度计算时,不允许慢,允许挂掉后通过各种形式重启任务,这时候将使用虚拟内存的积极性调
    低 vm.swappiness 的值可设置较大。当任务在一般计算时,可以慢,不允许挂,这时候将使用虚拟内存    
    的积极性调高 。


F)生产上一般允许慢不允许挂,然后vm.swappiness设置为10。
    
    
[root@timeserver ~]# cat /proc/sys/vm/swappiness
60
也就是说,你的内存在使用到100-60=40%的时候,就开始会使用虚拟内存。

临时调整(重启失效):
    [root@timeserver ~]# sysctl vm.swappiness=10
    vm.swappiness = 10
    [root@timeserver ~]# cat /proc/sys/vm/swappiness
    10

永久调整,先完成临时调整,再执行以下操作:
    [root@timeserver ~]# vi /etc/sysctl.conf
    # Controls the maximum number of shared memory segments, in pages
    在“kernel.shmall = 4294967296”后加上
    “vm.swappiness=10”

    [root@timeserver ~]# sysctl -p
    vm.swappiness = 10




4、CPU调优

在yarn中,一个物理core等价于两个vcore,这个在CDH版本的hadoop中有一个参数控制(不要轻易调)

G)yarn.nodemanager.resource.cpu-vcores 
    可为Container分配的容器数量,这个参数在Resource Scheduler为Container分配资源时可以用到。
如果它的值被设置为-1,且参数yarn.nodemanager.resource.detect-hardware-capabilities的值为
true,则不限制yarn使用CPU的数量,也可以设置为8

H)yarn.nodemanager.resource.detect-hardware-capabilities 
    是否自动检测节点的CPU和内存 默认为false

I)yarn.scheduler.minimum-allocation-vcores               
    为每个Container分配的最少的vcore,小于这个参数设定的值则会抛出异常 默认为1
J)yarn.scheduler.maximum-allocation-vcores           
    为每个Container分配的最多的vcore,大于这个参数设定的值则会抛出异常 默认为4(生产调)


    #####yarn的调优要达到最好的效果,还得搭配上mapreduce的调优才行。

5、




注:
    对于每台机器可以起多少个container,每个container可以有多少内存
    参考:
        https://blog.csdn.net/pengzonglu7292/article/details/78885818

 

 

 

 

 


版权声明:本文为pengzonglu7292原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。