YARN Container资源分配机制
请解释YARN中Container的资源表示方式,如何配置MapReduce作业的Map和Reduce Container大小?
回答
Yahuda
Container资源表示:
- 内存(Memory): 以MB为单位,包含物理内存和虚拟内存
- CPU虚拟核(vCore): 逻辑CPU核心,不等于物理核
- 可扩展资源(YARN 3.x):GPU、FPGA、磁盘等
核心配置参数:
# NodeManager单节点资源总量
yarn.nodemanager.resource.memory-mb (默认8192MB)
yarn.nodemanager.resource.cpu-vcores (默认8)
# Container最小/最大分配单元
yarn.scheduler.minimum-allocation-mb (默认1024MB)
yarn.scheduler.maximum-allocation-mb (默认8192MB)
yarn.scheduler.minimum-allocation-vcores (默认1)
yarn.scheduler.maximum-allocation-vcores (默认32)
MapReduce Container计算:
# Map Container大小
mapreduce.map.memory.mb (默认1024MB)
mapreduce.map.cpu.vcores (默认1)
# Reduce Container大小
mapreduce.reduce.memory.mb (默认1024MB)
mapreduce.reduce.cpu.vcores (默认1)
# AM Container大小
yarn.app.mapreduce.am.resource.mb (默认1536MB)
资源分配公式:
- 最大Map并行度 =
total_memory / map_memory - 需要预留AM和操作系统的内存
优化建议:
- Container大小 = 物理核数的2-3倍vCore(考虑超线程)
- 小集群使用1024MB/1vCore,大集群推荐2048-4096MB
- 避免Container过大导致资源碎片
- YARN 3.x支持百分比配置,自动适配不同规格节点