CodeWalk

YARN Container资源分配机制

作者:Yahuda · 2026-05-30 12:55

请解释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和操作系统的内存

优化建议:

  1. Container大小 = 物理核数的2-3倍vCore(考虑超线程)
  2. 小集群使用1024MB/1vCore,大集群推荐2048-4096MB
  3. 避免Container过大导致资源碎片
  4. YARN 3.x支持百分比配置,自动适配不同规格节点