YARN(Yet Another Resource Negotiator)是 Hadoop 2.x 及以后版本中的资源管理和作业调度框架。它的核心职责之一是 调度集群资源(如 CPU、内存)给不同的应用程序。YARN 支持多种调度策略,主要通过 可插拔的调度器(Scheduler) 实现。
一、YARN 调度器类型
YARN 提供三种主要的调度器:
1. FIFO Scheduler(先进先出调度器)
- 原理:按照应用程序提交的先后顺序排队,先提交的先分配资源。
- 特点:
- 简单、默认在早期 Hadoop 版本中使用。
- 不支持多租户或多队列,大作业会阻塞小作业。
- 适用场景:测试环境或单用户场景,生产环境一般不推荐。
2. Capacity Scheduler(容量调度器) ✅(Hadoop 默认调度器)
- 设计目标:支持多组织/团队共享集群,保证每个队列有最低资源保障,同时允许资源弹性共享。
- 核心机制:
- 集群资源被划分为多个 队列(Queues),每个队列配置 最小容量(capacity)。
- 队列内部作业按 FIFO 或其他策略调度。
- 当某个队列未用满其容量时,空闲资源可被其他队列 临时借用(弹性共享)。
- 支持 层级队列(Hierarchical Queues),例如
root.dev、root.prod。 - 支持 访问控制(ACL)、资源限制、优先级等。
- 优点:
- 多租户友好
- 资源隔离 + 弹性利用
- 适合长期运行的生产环境
- 配置文件:
capacity-scheduler.xml
📌 示例:
root队列下分dev(40%)和prod(60%)- 若
dev只用了 20%,则prod可临时使用剩余 20% 的资源
3. Fair Scheduler(公平调度器)
- 设计目标:随着时间推移,让所有作业公平地共享集群资源。
- 核心机制:
- 所有作业被分配到 池(Pools)(类似队列)。
- 资源按“公平份额”动态分配,小作业能快速获得资源,避免被大作业饿死。
- 支持 最小资源保障(minResources) 和 权重(weight) 调整优先级。
- 默认情况下,新作业立即获得部分资源,实现低延迟响应。
- 优点:
- 响应快,适合混合负载(交互式 + 批处理)
- 自动平衡资源,无需精细配置
- 配置文件:
fair-scheduler.xml
⚠️ 注意:从 Hadoop 3.1.0 开始,Fair Scheduler 已被标记为 deprecated(弃用),未来版本可能移除。官方推荐使用 Capacity Scheduler。
二、调度策略对比
| 特性 | FIFO | Capacity Scheduler | Fair Scheduler |
|---|---|---|---|
| 多队列支持 | ❌ | ✅(层级队列) | ✅(池) |
| 资源隔离 | ❌ | ✅(最小容量保障) | ⚠️(可配 minResources) |
| 资源弹性共享 | ❌ | ✅(借用空闲资源) | ✅(动态公平分配) |
| 适合多租户 | ❌ | ✅✅✅ | ✅ |
| 小作业响应速度 | 慢(被大作业阻塞) | 中(依赖队列配置) | 快 |
| 是否默认 | Hadoop 1.x 是 | Hadoop 2.x/3.x 默认 | 否 |
| 是否推荐生产使用 | ❌ | ✅✅✅ | ⚠️(已弃用) |
三、如何选择调度器?
- 企业生产环境 → Capacity Scheduler(功能全面、稳定、官方主推)
- 教学/测试/单用户 → FIFO(简单)
- 需要快速响应小作业(且 Hadoop < 3.1)→ Fair Scheduler(但需注意未来兼容性)
四、配置方式(简要)
切换调度器(在 yarn-site.xml 中):
<!-- 使用 Capacity Scheduler(默认) -->
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>
<!-- 使用 Fair Scheduler -->
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
然后根据所选调度器配置对应的 XML 文件。
总结
YARN 的调度策略核心在于 资源如何在多用户、多应用之间分配。
- Capacity Scheduler 是当前主流选择,兼顾隔离性与弹性;
- Fair Scheduler 曾用于追求公平和低延迟,但已被弃用;
- FIFO 仅适用于简单场景。
合理配置调度器,是构建高效、稳定大数据平台的关键一步。
1117

被折叠的 条评论
为什么被折叠?



