基于本文回答
0
评论

YARN 中自带了哪几种常见的资源调度器(Scheduler)?

知识点图片

在 Apache Hadoop YARN 中,自带了 三种 最常见的资源调度器(Scheduler)。它们主要用于解决在有限的集群资源下,如何合理地为多个应用程序(如 MapReduce、Spark、Flink 任务)分配资源的问题。

这三种调度器分别是:FIFO Scheduler(先进先出调度器)Capacity Scheduler(容量调度器)Fair Scheduler(公平调度器)

以下是它们的详细介绍和对比:


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

这是 YARN 中最基础、最简单的调度器。

  • 工作原理:将所有的应用程序放在一个单一的队列中,按照任务提交的时间顺序(先进先出)来分配资源。只有当排在前面的任务执行完毕(或者前面任务所需的资源已经满足),才会给下一个任务分配资源。
  • 优点
    • 逻辑简单,极易理解。
    • 不需要复杂的配置。
    • 调度器本身的系统开销极小。
  • 缺点
    • 极不适合多租户/共享集群
    • 大任务阻塞小任务:如果队列头部是一个需要消耗大量资源且运行时间极长的“大任务”,后面的“小任务”即使只需要很少的资源,也必须死等,导致系统响应时间极差。
  • 适用场景:个人开发测试环境,或者非常单纯的单任务批处理环境。在生产环境中几乎不使用

2. Capacity Scheduler(容量调度器)

这是 Apache Hadoop 默认 的资源调度器(由 Yahoo 贡献),专门为多租户共享集群设计。

  • 工作原理
    • 多队列:支持将集群资源划分成多个层级队列(如 root.sales, root.engineering)。
    • 容量保证:每个队列都可以配置一个“基础资源容量”(Capacity,按百分比配置),保证该队列最少能获得这些资源。
    • 弹性共享:如果某个队列的资源有剩余(空闲),调度器允许其他资源紧张的队列“借用”这些空闲资源,从而提高整个集群的资源利用率。
    • 队列内部默认采用 FIFO 策略(也可配置为 Fair 策略)。
  • 优点
    • 资源利用率高:通过弹性借用机制,不会让资源闲置。
    • 安全与隔离:通过严格的容量配置和访问控制,保证多部门/多租户之间的资源不被完全挤占。
  • 缺点
    • 配置相对复杂。
    • 如果一个队列借用了其他队列的资源,当资源所有者需要资源时,可能需要等待借用者释放资源(或者配置抢占机制强行终止借用者的任务,这会造成一定的资源浪费)。
  • 适用场景:适合多部门共享的大型生产集群,特别是对各部门资源占比有明确规划的场景。

3. Fair Scheduler(公平调度器)

这是由 Facebook 贡献的调度器,目的也是为了解决多租户共享集群的问题,但侧重点不同。

  • 工作原理
    • 动态公平:它的核心理念是让所有正在运行的应用在时间尺度上“公平”地获得相等的资源份额。
    • 无需排队等待:如果集群中只有一个任务在跑,它可以使用 100% 的资源。当第二个任务提交时,调度器会动态地将一半的资源分配给第二个任务(通过等待旧任务释放 Container 或资源抢占实现)。
    • 同样支持多队列,并可以为不同的队列或应用设置“权重(Weight)”,权重越高的队列分到的资源比例越大。
  • 优点
    • 小任务响应快:非常适合混合工作负载(长耗时的批处理任务 + 短耗时的交互式查询)。短任务提交后能迅速获得资源开始执行,无需等待大任务结束。
    • 资源分配极其动态和灵活。
  • 缺点
    • 调度逻辑最复杂,调度器本身的计算开销相对较大。
    • 在极端情况下,资源被切分得过于零碎,可能导致所有任务都在缓慢运行(不过可以通过配置最小资源量来避免)。
  • 适用场景:混合工作负载的生产集群,特别是交互式查询(如 Hive、Impala、Spark SQL)较多,要求快速响应的场景。(注:它曾是 CDH 发行版的默认调度器)。

总结与现状补充

调度器 核心特点 队列结构 资源分配方式 生产环境推荐度
FIFO 先到先得,大任务易阻塞 单队列 独占式顺序分配 ❌ 不推荐 (仅测试)
Capacity 容量保证,弹性借用 多队列层级 按配置比例分配,闲时借用 ⭐⭐⭐⭐⭐ (主流默认)
Fair 动态平衡,响应迅速 多队列层级 动态计算缺额,公平平分 ⭐⭐⭐⭐

💡 行业现状提示:
随着 Hadoop 生态的演进,特别是 Cloudera 和 Hortonworks 合并为 CDP (Cloudera Data Platform) 后,官方正在大力推荐使用 Capacity Scheduler,并提供了工具将 Fair Scheduler 的配置迁移到 Capacity Scheduler。在 Hadoop 3.x 时代,Capacity Scheduler 已经通过引入更多的高级特性(如内部 Fair 调度、更好的抢占机制)基本涵盖了原来 Fair Scheduler 的优势,成为了当前企业生产环境下的绝对主流。

右滑查看面试常问