YARN 队列资源争抢排查与 Capacity Scheduler 调优
从排队现象反推资源瓶颈,覆盖队列配额、用户限制、AM 占比与抢占配置的排查路径与调优方案
YARN 多队列场景下,任务长时间排队等待资源是运维工程师最常见的投诉之一。排查的核心是从排队现象反推资源瓶颈,定位是队列配额不足、用户限制过严还是抢占配置不当。
排查路径:从现象到根因
第一步:确认排队事实
通过 YARN ResourceManager Web UI 查看各队列的资源使用情况:
- 队列的 Capacity(分配容量)vs Used(已使用)vs Pending(待分配)
- 应用的 ACCEPTED 状态数量和等待时间
- 节点级别的资源使用率(CPU、内存)
如果队列的 Pending 资源持续大于 0,且应用等待时间超过预期,说明存在资源争抢。
第二步:定位争抢层级
队列间争抢:检查是否有队列超用(使用量超过 Capacity)。Capacity Scheduler 默认允许队列在空闲时借用资源,但如果多个队列同时借用,会导致相互争抢。
队列内争抢:检查单个队列内的应用数量是否过多。每个应用的 ApplicationMaster(AM)会占用资源,如果 AM 占比过高,实际可用于任务执行的资源会大幅减少。
用户间争抢:检查单个用户是否提交了过多应用。通过 user-limit-factor 控制单个用户的资源上限。
第三步:检查关键配置
队列容量配置:检查 capacity 和 maximum-capacity 设置。capacity 是队列的保证容量,maximum-capacity 是队列的最大容量。如果 maximum-capacity 设置过低,即使集群空闲,队列也无法获得更多资源。
AM 资源占比:检查 yarn.scheduler.capacity.maximum-am-resource-percent(默认 0.2)。如果 AM 占用超过 20% 的集群资源,实际计算资源会被压缩。对于大量短作业场景,可以适当降低此值。
用户限制:检查 user-limit-factor(默认 1)。设为 1 表示单个用户最多使用队列容量的 100%。如果需要限制单个用户的资源使用,可以设置为 0.5 等值。
抢占配置:检查 disablePreemption(默认 true)。如果禁用抢占,空闲资源无法被其他队列借用,可能导致资源利用率低下。
大数据基础平台 EasyMR
统一存储、计算与运维,支撑批、流、OLAP 与湖仓一体的国产化大数据底座平台
Capacity Scheduler 调优策略
策略一:合理分配队列容量
按业务优先级和资源需求分配队列容量。核心原则:
- 保证容量(capacity):按业务重要性分配,核心业务队列获得更高的保证容量
- 最大容量(maximum-capacity):防止非核心业务队列在空闲时占用过多资源,影响核心业务
- 弹性空间:预留 10-20% 的集群资源作为弹性缓冲,应对突发负载
策略二:优化 AM 资源管理
ApplicationMaster 是 YARN 资源管理的关键瓶颈:
- 降低 maximum-am-resource-percent 到 0.1-0.15,释放更多资源给实际计算
- 对短作业使用轻量级 AM(如 Spark 的 cluster 模式 vs client 模式)
- 合并小作业,减少 AM 数量
策略三:配置合理的抢占策略
启用抢占可以提高资源利用率,但需要谨慎配置:
- 设置 minimum-user-limit-percent,保证每个用户至少获得一定比例的资源
- 配置 ordering-policy(FIFO 或 fair),决定抢占时的优先级
- 设置 max-assign(默认 ∞),限制单次抢占分配的容器数量,避免大规模抢占导致的抖动
策略四:监控与告警
建立队列资源使用监控:
- 队列使用率持续超过 80% 时告警
- 应用等待时间超过阈值时告警
- AM 资源占比超过 30% 时告警
- 定期检查队列配置与实际使用是否匹配
数据治理
统一标准、质量、安全与资产管理,沉淀高质量数据集,支撑经营决策、监管合规与 AI 应用。
典型场景调优
场景一:核心业务排队。检查是否被非核心业务抢占资源。提高核心业务队列的 capacity 和 maximum-capacity,降低非核心队列的 maximum-capacity。
场景二:大量小作业排队。AM 占比过高是主要原因。降低 maximum-am-resource-percent,合并小作业,或使用 FIFO 调度减少同时运行的 AM 数量。
场景三:队列资源利用率低但应用排队。可能是队列间借用被禁用或抢占配置不当。检查 disablePreemption 和 maximum-capacity 设置。
YARN 调优的核心是在资源利用率和业务 SLA 之间找到平衡点。建议建立定期审查机制,根据业务变化动态调整队列配置,而非设置后一成不变。


