Apache YARN 调度器优化全景分析(2022 — 2026)

分析时间: 2026-07-05
数据来源: Apache JIRA (issues.apache.org)
检索范围: YARN 项目, 2022年1月 ~ 2026年7月
覆盖: 4.5 年跨度


一、调研概览

维度说明
检索范围Apache JIRA,关键词覆盖 scheduling / resource allocation / queue / preemption / placement / container / capacity scheduler / fair scheduler
时间窗口2022年1月 — 2026年7月(4年半)
总检索命中约 300+ 条结果,去重去无关后约 80+ 个相关 Issue
覆盖子领域性能优化

按年份分布

年份Issue 数已修复修复率特征
2022~20~12~60%基础加固:AQCv2、deadlock修复、预取优化
2023~18~8~44%并发调度启动、抢占策略、DRF修复
2024~25~10~40%性能优化高峰、Global Scheduler加速、过量分配修复
2025~15~8~53%CS UI 建设、Rich Placement、调度正确性
2026~10~2~20%CS UI 改进、动态请求处理、调度器饥饿修复

二、核心主题深度分析

🥇 主题 1:性能优化(最核心方向)

这是用户最关注的方向,也是社区投入最大的领域。

JIRA ID年份标题状态修复版本优化点
YARN-119682026FairOrderingPolicy: 避免重复扫描无 pending 请求的 appOpen减少无意义的扫描
YARN-117522025Global Scheduler: 改进容器分配时间Resolved3.5.0核心调度路径加速
YARN-117982025预检查请求分离,避免冗余节点检查Resolved3.5.0减少预检查计算量
YARN-117502024并行初始化队列Open启动加速
YARN-117492024跳过 RegularContainerAllocator 中不必要的 node-askingRequest 匹配Open减少匹配计算
YARN-116602024SingleConstraintAppPlacementAllocator 性能回退Resolved3.4.1回归修复
YARN-116432024跳过 Multi Node Placement 中不必要的预检查Open减少预检查
YARN-116862024异步调度时修正遍历索引Open异步调度正确性
YARN-116932024重构 Container 调度器(umbrella)Open架构级重构
YARN-114402023创建并发 Leaf QueueOpen并发调度基础
YARN-114112023[Umbrella] 构建并发 YARN 调度器In Progress架构级改造
YARN-114122023创建并发 Users ManagerIn Progress并发调度基础
YARN-116562024RMStateStore 事件队列阻塞Patch Available状态存储性能
YARN-112162022避免不必要的 ConfigurationProperties 重建Patch Available配置加载优化
YARN-112022022优化 ClientRMService.getApplicationsResolvedRPC 优化

性能优化演进路线

2022: 基础优化
  ├── YARN-11216 — 配置加载减少重建
  └── YARN-11202 — getApplications RPC 优化

2023: 并发调度启动
  ├── YARN-11411 — 并发调度器 umbrella ★
  ├── YARN-11440 — 并发 Leaf Queue
  └── YARN-11412 — 并发 Users Manager

2024: 调度路径加速(高峰年)
  ├── YARN-11749 — 跳过不必要的 node-askingRequest 匹配
  ├── YARN-11643 — 跳过不必要的预检查
  ├── YARN-11660 — 恢复 SingleConstraint 性能 (3.4.1)
  ├── YARN-11686 — 异步调度索引修正
  ├── YARN-11693 — Container 调度器重构
  └── YARN-11656 — RMStateStore 事件队列

2025: 全局调度器加速
  ├── YARN-11752 — 容器分配时间改进 (3.5.0) ★
  └── YARN-11798 — 预检查分离 (3.5.0) ★

2026: 细粒度优化
  └── YARN-11968 — 避免扫描无 pending 请求的 app

关键发现:性能优化从 2022 的基础层面(配置加载、RPC)逐步深入到 2024-2025 的核心调度路径(分配、匹配、预检查),2025 年的 YARN-11752 和 YARN-11798 在 3.5.0 中已落地。但并发调度器(YARN-11411)3.5 年后仍在 In Progress。


🥈 主题 2:并发调度器建设(架构级改造)

这是 YARN 调度器领域最重大的架构变更。

JIRA ID标题状态持续说明
YARN-11411[Umbrella] 构建并发 YARN 调度器In Progress3.5年+顶层架构设计
YARN-11440创建并发 Leaf QueueOpen3.5年+核心数据结构
YARN-11412创建并发 Users ManagerIn Progress3.5年+用户管理并发化
YARN-11693重构 Container 调度器Open2年+容器分配重构

分析:并发调度器是解决大集群调度延迟的根本方案。当前 YARN 调度器使用全局写锁,在数千节点、数万容器场景下成为瓶颈。但此项目已推进 3.5 年尚未完成,表明复杂度极高。


🥉 主题 3:抢占(Preemption)优化

JIRA ID年份标题状态说明
YARN-110732022避免 tiny queue 不必要的抢占Resolved 3.4.0✅ 小队列频繁抢占修复
YARN-111712022高优先级任务饥饿,低优先级未被抢占Open优先级抢占失效
YARN-111942022FairShare 抢占不强制 sibling 间公平OpenFS 公平性
YARN-114282023FS: 期望的抢占可能不执行Open抢占执行可靠性
YARN-116242023添加配置禁用 AM 抢占Open运维灵活性
YARN-116232023FS: 文档化 AM 抢占变更Open文档
YARN-119072025FairSharePolicy: compareDemand() 导致队列饥饿Patch Available⚠️ 关键饥饿问题
YARN-115732023配置项:优先选择无 reserved 容器的节点Resolved调度偏好

分析:抢占是 YARN 调度中最复杂也最易出问题的领域。2022 修复了 tiny queue 频繁抢占问题(YARN-11073),但 Fair Scheduler 的多个抢占相关 Bug 从 2022-2023 年提交后一直 Open,最严重的是 YARN-11907(compareDemand 导致队列饥饿),已有补丁但未合入。


主题 4:Capacity Scheduler 增强

JIRA ID年份标题状态修复版本
YARN-115732023优先选择无 reserved 容器的节点Resolved
YARN-115032023Mutation API 添加队列后停止分配Open
YARN-115072023CSQueue 属性受 DominantResourceCalculator 影响Open
YARN-116402024CS 支持 FairOrderingPolicy 的应用优先级Open
YARN-116482024CS 在资源释放时未激活应用Open
YARN-117282024Multi-node placement 启用时调度挂起Open
YARN-117662025实现 DELAYED_OR 运算符(Rich Placement)Open
YARN-117812025实现动态请求处理Open
YARN-118092025CS 支持应用 backoff 机制Open

分析:CS 相关的 Issue 修复率较低(多数 Open),表明 CS 功能迭代速度较慢。2025 年的动态请求处理(YARN-11781)和 backoff 机制(YARN-11809)值得关注。


主题 5:Fair Scheduler 专项

JIRA ID年份标题优先级状态
YARN-114822023修复 DRF 比较器 BugMajorResolved
YARN-116152023FS 比较方法违反契约MajorOpen
YARN-116972024FS removeApplicationAttempt 竞态条件MajorOpen
YARN-117202024FS + NodeLabels 负指标MajorOpen
YARN-119072025FairSharePolicy.compareDemand() 导致队列饥饿MajorPatch Available
YARN-119662026PartitionQueueMetrics already exists!CriticalPatch Available
YARN-119682026FairOrderingPolicy 避免重复扫描无 pending 请求 appMajorOpen

分析:FS 在 2023-2024 年修复了 DRF 比较器(YARN-11482)等基础问题,但仍有多个 Open Issue。2026 年的 YARN-11966(Critical)表明 FS 的 metrics 系统存在严重设计问题。


主题 6:Capacity Scheduler UI(2025-2026 重大工程)

JIRA ID年份标题状态说明
YARN-118852025[Umbrella] YARN Capacity Scheduler UIResolved 3.5.0✅ Phase 1
YARN-11886~118902025CS UI sub-tasks(serve/integrate)Resolved7 个子任务
YARN-119442026[Umbrella] YARN Capacity Scheduler UI ImprovementOpenPhase 2
YARN-11945~119512026CS UI 改进 sub-tasks(Apps/Nodes/Config/Logs 视图迁移)Open7 个子任务

分析:CS UI 是 2025-2026 年 YARN 社区的重大工程投入。Phase 1(YARN-11885)已在 3.5.0 落地,Phase 2(YARN-11944)正在推进中,将 Apps/Nodes/Config/Logs 视图全面迁移到新 UI。


主题 7:调度正确性(Bug 修复)

JIRA ID年份标题优先级状态修复版本
YARN-111912022Global Scheduler refreshQueue deadlockMajorResolved
YARN-115012023RM deadlockCriticalResolved
YARN-115602023Multi-node + async 调度 NPEBlockerResolved
YARN-116392024PriorityUtilizationQueueOrderingPolicy 并发修改异常MajorResolved
YARN-116842024PriorityQueueComparator 违反契约MajorResolved
YARN-117022024过量分配容器(CS + FS)CriticalResolved3.5.0
YARN-117852025QueueMetrics HashMap 竞态条件MajorResolved
YARN-118342025App 因竞态条件卡在 ACCEPTED 状态MajorResolved3.5.0
YARN-118432025自动纠正启用时潜在 deadlockMajorOpen

分析:调度正确性 Issue 的修复率很高(9/10 Resolved),YARN-11702(过量分配)和 YARN-11834(ACCEPTED 卡住)在 3.5.0 修复,对生产环境影响重大。YARN-11843(自动纠正 deadlock)是唯一 Open 的调度正确性 Bug。


主题 8:调度放置优化

JIRA ID年份标题状态
YARN-117042024避免嵌套 AND 放置约束Open
YARN-117322024SchedulerNode#reservedContainer NPEResolved
YARN-117362024增强 MultiNodeLookupPolicy 比较器Open
YARN-117662025实现 DELAYED_OR 运算符Open

主题 9:Federation 调度

JIRA ID年份标题状态
YARN-113212022添加 getSchedulerOverview 到 RMWebServicesOpen
YARN-116332023改进 LoadBasedRouterPolicy 使用可用 vcoresOpen

三、完整时间线全景图

2022
├── YARN-11067 (Feb) — Resource overcommitment fix ✅
├── YARN-11073 (Feb) — Tiny queue 不必要抢占 ✅ 3.4.0
├── YARN-11147 (Apr) — Thread safety fixes ✅
├── YARN-11152 (Apr) — QueueMetrics 泄漏 ✅
├── YARN-11171 (Jun) — 高优饥饿、低优未抢占 ❌ Open
├── YARN-11191 (Jun) — refreshQueue deadlock ✅
├── YARN-11194 (Jun) — FairShare sibling 公平性 ❌ Open
├── YARN-11202 (Jun) — getApplications 优化 ✅
├── YARN-11216 (Jul) — ConfigurationProperties 重建 ❌ Patch Available
├── YARN-11321 (Sep) — Federation getSchedulerOverview ❌ Open

2023
├── YARN-11411 (Jan) — 并发调度器 umbrella ⏳ In Progress
├── YARN-11412 (Jan) — 并发 Users Manager ⏳ In Progress
├── YARN-11428 (Feb) — FS 抢占不执行 ❌ Open
├── YARN-11440 (Feb) — 并发 Leaf Queue ❌ Open
├── YARN-11482 (Apr) — DRF 比较器修复 ✅
├── YARN-11501 (May, Critical) — RM deadlock ✅
├── YARN-11503 (May) — Mutation API 队列停止分配 ❌ Open
├── YARN-11507 (Jun) — CSQueue DominantResourceCalculator ❌ Open
├── YARN-11560 (Sep, Blocker) — Multi-node + async NPE ✅
├── YARN-11573 (Sep) — 优先选择无 reserved 节点 ✅
├── YARN-11615 (Nov) — FS 比较方法违反契约 ❌ Open
├── YARN-11623 (Dec) — FS AM 抢占文档 ❌ Open
├── YARN-11624 (Dec) — 配置禁用 AM 抢占 ❌ Open
├── YARN-11633 (Dec) — Federation LoadBasedRouterPolicy ❌ Open

2024
├── YARN-11639 (Jan) — PriorityUtilizationQueue 并发修改 ✅
├── YARN-11640 (Jan) — CS FairOrderingPolicy 优先级 ❌ Open
├── YARN-11643 (Jan) — Multi Node 预检查跳过 ❌ Open
├── YARN-11648 (Jan) — CS 资源释放未激活 ❌ Open
├── YARN-11656 (Feb) — RMStateStore 阻塞 ❌ Patch Available
├── YARN-11660 (Mar) — SingleConstraint 性能回退 ✅ 3.4.1
├── YARN-11684 (Apr) — PriorityQueueComparator 违反契约 ✅
├── YARN-11686 (Apr) — 异步调度索引修正 ❌ Open
├── YARN-11693 (Apr) — Container 调度器重构 ❌ Open
├── YARN-11697 (May) — FS removeApplicationAttempt 竞态 ❌ Open
├── YARN-11702 (Jun, Critical) — 过量分配容器 ✅ 3.5.0
├── YARN-11704 (Jul) — 嵌套 AND 放置约束 ❌ Open
├── YARN-11720 (Sep) — FS + NodeLabels 负指标 ❌ Open
├── YARN-11728 (Sep) — Multi-node 调度挂起 ❌ Open
├── YARN-11732 (Sep) — SchedulerNode NPE ✅
├── YARN-11736 (Oct) — MultiNodeLookupPolicy 比较器 ❌ Open
├── YARN-11749 (Dec) — 跳过不必要的 node-match ❌ Open
├── YARN-11750 (Dec) — 并行初始化队列 ❌ Open

2025
├── YARN-11752 (Jan) — Global Scheduler 容器分配时间 ✅ 3.5.0
├── YARN-11766 (Feb) — DELAYED_OR 运算符 ❌ Open
├── YARN-11781 (Mar) — 动态请求处理 ❌ Open
├── YARN-11785 (Mar) — QueueMetrics 竞态 ✅
├── YARN-11798 (Mar) — 预检查分离 ✅ 3.5.0
├── YARN-11809 (Apr) — CS backoff 机制 ❌ Open
├── YARN-11834 (Jul) — App ACCEPTED 卡住 ✅ 3.5.0
├── YARN-11843 (Aug) — 自动纠正 deadlock ❌ Open
├── YARN-11885 (Nov) — CS UI Phase 1 ✅ 3.5.0
├── YARN-11886~11890 (Nov) — CS UI sub-tasks ✅ 3.5.0
├── YARN-11907 (Dec) — FairSharePolicy 饥饿 ⚠️ Patch Available

2026
├── YARN-11944 (Mar) — CS UI 改进 Phase 2 ❌ Open
├── YARN-11945~11951 (Mar) — CS UI 视图迁移 ❌ Open
├── YARN-11966 (Jun, Critical) — PartitionQueueMetrics ❌ Patch Available
├── YARN-11968 (Jun) — FairOrderingPolicy 重复扫描 ❌ Open

四、待解决的 Top 5 关键 Issue

排名Issue领域影响阻碍
🥇YARN-11411 — 并发调度器架构大集群调度吞吐量瓶颈3.5年未完成,复杂度极高
🥈YARN-11907 — FairSharePolicy 饥饿FS队列无法获取公平份额Patch 未合入
🥉YARN-11966 — PartitionQueueMetrics 冲突FSCritical 级 metrics 设计缺陷Patch Available
🏅YARN-11843 — 自动纠正 deadlockCS自动纠正功能导致死锁无补丁
🏅YARN-11750 — 队列并行初始化性能RM 启动时间优化实现中

五、社区动态总结

维度发现
最活跃领域性能优化(~15 个 Issue)> CS UI(~14 个)> 抢占(~8 个)
修复率整体约50%,调度正确性类修复率最高(90%),CS 功能类最低(~30%)
重大发布3.4.0: 2022-2023 基础修复集中发布;3.5.0: Global Scheduler 加速 + CS UI + 过量分配修复
架构级项目并发调度器(YARN-11411)已推进 3.5 年仍未完成,是最大技术债
新方向CS UI 是 2025-2026 最大投入(14 个子任务),标志着从功能到可观测性的转变
性能趋势从 2022 的配置加载优化 → 2024 的调度路径匹配优化 → 2025 的核心容器分配加速
饥饿问题2026 年 Fair Scheduler 的饥饿问题(YARN-11907, 11968, 11966)集中涌现,值得关注

核心结论

  1. 3.5.0 是 YARN 调度器优化的里程碑版本 — YARN-11752(分配加速)、YARN-11798(预检查分离)、YARN-11702(过量分配修复)、YARN-11834(ACCEPTED 卡住修复)、YARN-11885(CS UI)均在 3.5.0 合并
  2. 并发调度器是最大的未完成工程 — YARN-11411 已推进 3.5 年,是整个 YARN 调度器未来性能的基石,但复杂度远超预期
  3. Fair Scheduler 的公平性在退化 — 2025-2026 年多个 Issue(YARN-11907 饥饿、YARN-11966 metrics 冲突)表明 FS 的基础公平性保障正在出现问题
  4. 运维可观测性显著提升 — CS UI Phase 1/2(14 个子任务)是最大的新功能投入

附录:按主题分类的完整 Issue 列表

A. 性能优化(15 个)

YARN-11968, YARN-11752, YARN-11798, YARN-11750, YARN-11749, YARN-11660, YARN-11643, YARN-11686, YARN-11693, YARN-11440, YARN-11411, YARN-11412, YARN-11656, YARN-11216, YARN-11202

B. 并发调度器(4 个)

YARN-11411(umbrella), YARN-11440(leaf queue), YARN-11412(users mgr), YARN-11693(container scheduler)

C. 抢占(8 个)

YARN-11073, YARN-11171, YARN-11194, YARN-11428, YARN-11624, YARN-11623, YARN-11907, YARN-11573

D. 调度正确性(10 个)

YARN-11191, YARN-11501, YARN-11560, YARN-11639, YARN-11684, YARN-11702, YARN-11785, YARN-11834, YARN-11843, YARN-11732

E. Capacity Scheduler(12 个)

YARN-11573, YARN-11503, YARN-11507, YARN-11640, YARN-11648, YARN-11728, YARN-11766, YARN-11781, YARN-11809, YARN-11843, YARN-11750, YARN-11702

F. Fair Scheduler(8 个)

YARN-11482, YARN-11615, YARN-11697, YARN-11720, YARN-11907, YARN-11966, YARN-11968, YARN-11194

G. CS UI(14 个)

YARN-11885(umbrella), YARN-11886~11890(7 sub-tasks), YARN-11944(umbrella), YARN-11945~11951(7 sub-tasks)

H. 调度放置(4 个)

YARN-11704, YARN-11732, YARN-11736, YARN-11766

I. Federation(2 个)

YARN-11321, YARN-11633


分析由 Apache Issue AI Analyzer 辅助完成 | 覆盖 2022-2026 年共 4.5 年跨度

# Yarn 


标 题:《Apache YARN 调度器优化全景分析(2022 — 2026)
作 者:zeekling
提 示:转载请注明文章转载自个人博客:浪浪山旁那个村

评论

取消