理论基础
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版权协议,转载请附上原文出处链接和本声明。