CodeWalk

YARN调度器对比:FIFO vs Capacity vs Fair

作者:我是大山 · 2026-05-30 12:55

请比较YARN的三种调度器:FIFO Scheduler、Capacity Scheduler和Fair Scheduler的异同,并说明各自适用的场景。

回答

我是大山

1. FIFO Scheduler(先进先出调度器):

  • 原理: 按Job提交顺序逐个执行,先提交的先获取全部资源
  • 优点: 简单、无额外开销
  • 缺点: 不支持多租户,大Job会阻塞小Job,响应延迟高
  • 场景: 单用户、单队列的小集群,不推荐生产使用

2. Capacity Scheduler(容量调度器,默认):

  • 原理: 将集群资源划分为多个队列(Queue),每个队列有最低容量保证弹性上限
  • 特点:
    • 队列间资源隔离(如prod占70%,dev占30%)
    • 队列空闲资源可借给其他队列(弹性)
    • 支持层级队列(如root.production.realtime
    • 支持ACL访问控制
  • 优点: 多租户隔离好,资源利用率高
  • 场景: 企业中多团队共享集群,需要资源保障和隔离

3. Fair Scheduler(公平调度器):

  • 原理: 所有Job公平分享资源,每个Job获得大致相同的资源量
  • 特点:
    • 短作业优先:小Job提交后快速获取资源执行
    • 支持抢占(Preemption):当某队列资源不足时,回收超额分配的资源
    • 支持延迟调度:等待数据本地性而延迟分配
  • 优点: 响应时间短,适合交互式查询
  • 场景: 多用户共享集群,对延迟敏感的场景

对比表: | 特性 | FIFO | Capacity | Fair | |------|------|----------|------| | 多租户 | ❌ | ✅ | ✅ | | 资源保证 | ❌ | ✅(最低容量)| ✅(最小份额)| | 抢占 | ❌ | ❌ | ✅ | | 延迟调度 | ❌ | ❌ | ✅ | | 复杂性 | 低 | 中 | 高 |