1.yarn内存调优
说明:yarn主件的nodemanager进程管理的resource的memory资源
可以分配给容器的物理内存(以MB为单位)。如果设置为-1,并yarn.nodemanager.resource.detect-hardware- capability为真,则自动计算(在Windows和Linux中)。在其他情况下,默认值是8192MB。
yarn.nodemanager.resource.memory-mb
yarn.scheduler.minimum-allocation-mb 分配的最小内存大小默认为1024MB
yarn.scheduler.maximum-allocation-mb 分配的最大内存大小默认为8192MB
2.yarnCPU调优
说明:Vcores ,虚拟的core,是yarn提出的
物理core:vcore=1:2
可以分配给容器的vcore数量。这是RM调度程序在为容器分配资源时使用的。这并不用于限制yarn容器使用的cpu数量。如果将其设置为-1,并且yarn.nodemanager.resource.detect-hardware- capability为真,则在Windows和Linux中,将从硬件自动确定它。在其他情况下,vcore的数量默认为8。
yarn.nodemanager.resource.cpu-vcores
yarn.scheduler.minimum-allocation-vcores 分配给容器的最小vcore数量为1
yarn.scheduler.maximum-allocation-vcores 分配给容器的最大vcore数量为4
3案例
机器的物理内存大小为64G 16cores 怎样资源最大化利用
一般会分配2G给各系统,实际可用内存为62G,系统不会消耗CUP,所以CPU的核数还是16c。
通常会预留15%-20%的内存,以防内存消耗完,会触发OOM机制。
62*80%=50G给计算资源
剩余12G, 通常分配4G给我们的datanode,分配1G给我们的nodemanager, 剩余7G
计算时会启动Container容器,启动额外的进程需要一定的内存
剩余的50G,可以这样分配。
yarn.nodemanager.resource.memory-mb : 50G 计算总内存
yarn.scheduler.minimum-allocation-mb : 1G
increment
yarn.scheduler.maximum-allocation-mb : 1G–>50G
#所以Container的个数范围:1~50
#DN memory:4G
#Nm memory:1G
#有16c–>会有32vcore,尽量不要超出32vcore
yarn.nodemanager.resource.memory-mb 50G
yarn.nodemanager.resource.cpu-vcores 32c 我们将一核虚拟化成2个vcore
yarn.scheduler.minimum-allocation-mb 2G 根据业务设置
yarn.scheduler.minimum-allocation-vcores 2c 根据业务设置,根据需要递增的
yarn.scheduler.maximum-allocation-mb 8G 根据业务设置
yarn.scheduler.maximum-allocation-vcores 4c 这个值可以确定,经过clouder公司测试,vcores在小于5的时候,性能是最佳的
注:内存不够的时候会自动累加,Vcore不够的时候不会自动累加,需要在启动的时候设置