yarn Container 容器的优化
yarn Container 容器的优化
我遇到了一个问题:
由于服务器是三台4核16G的小集群, 每启动一个容器就会占用 4 个虚拟核 ,这种情况下我的内存够用但是核数不够 ,这样的话 同时提交两个任务 基本上就挂起了 ,
我也找了很多种方式
最多的就是
充分利用cpu和内存
yarn资源管理有虚拟核和虚拟内存的概念,可以将虚拟核、虚拟内存调整为物理机的两到三倍,增加任务数量,提高cpu使用率。
yarn.nodemanager.resource.cpu-vcores 虚拟核数,默认为8
yarn.scheduler.minimum-allocation-vcores 为每个Container分配的最少的vcore,默认为1
yarn.scheduler.maximum-allocation-vcores 为每个Container分配的最多的vcore,默认为4
yarn.nodemanager.resource.memory-mb NM占用机器的内存大小
yarn.scheduler.minimum-allocation-mb Container包含的最小内存
yarn.scheduler.maximum-allocation-mb Container包含的最大内存
yarn.nodemanager.pmem-check-enabled 容器是否会执行物理内存限制,默认为True
yarn.nodemanager.vmem-check-enabled 容器是否会执行虚拟内存限制,默认为True
yarn.nodemanager.vmem-pmem-ratio 使用虚拟内存和物理内存的比值,默认为2.1
解决方式 1:
将你的虚拟核数增大
yarn.nodemanager.resource.cpu-vcores 一台从节点可以调用的cpu的核数 , 一般是跟你服务器的核数相同,或者2倍,我这里直接改成了8 ,两台4核服务器,这样yarn 就有可能不会挂起了,因为yarn能够分配核数了 , 但是任务执行的时间会加长 会变慢。
解决方案2
控制一个Container容器分配多少vcores
我是修改了上面的核数,增加了yarn单台服务器能够调用8个核数虚拟核数,两台16核,然后控制每个Container最大可分配2个核数。
修改yarn.scheduler.maximum-allocation-vcores 每启动一个容器最大占用两个虚拟核
方案1、方案2都调整后的结果
结果:看图
结果是在运行的时候稍微慢点,但是基本上没有问题了。不会因为核数不足而导致任务挂起了。