YARNcpu内存方面的优化

参数优化
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。对于一个CPU核数较多的集群来说,上面的默认配置显然是不合适的。在测试集群中,4个节点每个机器CPU核数为31,留一个给操作系统,可以配置为:根据经验,物理core:vcores=1:2。
YARN内存核心参数
YARN允许用户配置每个节点上可用的物理内存资源,注意,这里是“可用的”,因为一个节点上的内存会被若干个服务共享,比如一部分给YARN,一部分给HDFS,一部分给HBase等,YARN配置的只是自己可以使用的,配置参数如下:
-
yarn.nodemanager.resource.memory-mb
表示该节点上YARN可使用的物理内存总量,默认是8192(MB)。如果节点内存资源不够8GB,则需要调减小这个值,而YARN不会智能探测节点的物理内存总量。 -
yarn.scheduler.minimum-allocation-mb
单个容器可申请的最少物理内存量,默认是1024(MB)。如果一个容器申请的物理内存量少于该值,则该对应的值改为这个数。 -
yarn.scheduler.maximum-allocation-mb
单个容器可申请的最多物理内存量,默认是8192(MB)。
Container合理配置检查
计算每台机子最多可以拥有多少个container,可以使用下面的公式:
plaintext
containers = min (2*CORES, 1.8*DISKS, (Total available RAM) / MIN_CONTAINER_SIZE)
说明:
- CORES 为机器CPU核数
- DISKS 为机器上挂载的磁盘个数
- Total available RAM 为机器总内存
每个 Container 占用的内存大小公式:
plaintext
RAM-per-container = max(MIN_CONTAINER_SIZE, (Total Available RAM)/containers)

Node Label + CGroup
完成资源隔离和对单个/单组进程进行精细化的资源限制。
Node-Label相关配置,加在yarn-site.xml里面,目前只有capacity scheduler支持比较好。CGroup 功能集成在 LinuxContainerExecutor 中,所以要使用 CGroup 功能,必须设置 container-executor 为 LinuxContainerExecutor。同时需要配置 NM 的 Unix Group,这个是可执行的二进制文件 container-executor 用来做安全验证的,需要与 container-executor.cfg 里面配置的一致。
以下是cgroup常见核心参数:


end
