YARN 资源分配的配置参数

2017/8/8 posted in  Yarn

无论是mapreduce程序或者是Spark程序,提交到Yarn上来进行资源管理与分配的时候.都是运行在Yarn的Container容器中.
而Container容器中是Yarn封装的内存和CPU资源.暂时还不支持对网络IO等资源进行封装分配.那么在开发调优过程中,我们肯定无法避免会对内存进行一些分配.那么Yarn的哪些配置参数是对哪个地方进行分配的,就很重要,也就值得记一记.

内存资源

ResourceManager

配置参数 说明 备注
yarn.scheduler.minimum-allocation-mb 单个任务可申请的最少物理内存量,默认是1024(MB),如果一个任务申请的物理内存量少于该值,则该对应的值改为这个数
yarn.scheduler.maximum-allocation-mb 单个任务可申请的最多物理内存量,默认是8192(MB)

说明:
也就是ResourceManager启动的Container容器的最大与最小内存.

nodemanager

配置参数 说明 备注
yarn.nodemanager.resource.memory-mb 节点最大可用内存,默认8096M
yarn.nodemanager.vmem-pmem-ratio 虚拟内存率,任务每使用1MB物理内存,最多可使用虚拟内存量,默认为 2.1
yarn.nodemanager.pmem-check-enabled 是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true
yarn.nodemanager.vmem-check-enabled 是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true

说明:
1. 在 Centos/RHEL 6 下,由于虚拟内存的分配策略比较激进,可以调高 yarn.nodemanager.vmem-pmem-ratio 或者关闭 yarn.nodemanager.vmem-check-enabled。
2. 不然的话有时候就会碰上抛出容器超出内存限制,然后容器被kill掉.
3. 比如这个问题 https://stackoverflow.com/questions/21005643/container-is-running-beyond-memory-limits

ApplicationMaster

配置参数 说明 备注
mapreduce.map.memory.mb 分配给 Map Container的内存大小,运行时按需指定
mapreduce.reduce.memory.mb 分配给 Reduce Container的内存大小,运行时按需指定
mapreduce.map.java.opts 运行 Map 任务的 jvm 参数,如 -Xmx,-Xms 等选项
mapreduce.reduce.java.opts 运行 Reduce 任务的 jvm 参数,如-Xmx,-Xms等选项

CPU资源

配置参数 说明 备注
yarn.nodemanager.resource.cpu-vcores 该节点上 YARN 可使用的虚拟 CPU 个数,默认是8
yarn.scheduler.minimum-allocation-vcores 单个任务可申请的最小虚拟CPU个数, 默认是1
yarn.scheduler.maximum-allocation-vcores 单个任务可申请的最多虚拟CPU个数,默认是32