首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >YARN 资源调度策略深度解析:Capacity vs Fair 如何选?

YARN 资源调度策略深度解析:Capacity vs Fair 如何选?

原创
作者头像
gavin1024
发布2026-07-07 10:25:04
发布2026-07-07 10:25:04
140
举报

摘要

本文深入解析 YARN 的两种资源调度策略——Capacity Scheduler 和 Fair Scheduler,从原理、配置、适用场景等维度进行对比,帮助您选择适合业务需求的调度策略。

一、YARN 资源调度概述

YARN(Yet Another Resource Negotiator)是 Hadoop 的生态中的资源管理和作业调度框架。ResourceManager 中的 Scheduler 组件负责资源分配,决定如何将集群资源分配给各个作业。

1.1 YARN 的三层调度模型

YARN 的调度模型分为三层:

  • 资源申请层:ApplicationMaster 向 ResourceManager 申请资源
  • 资源分配层:Scheduler 根据调度策略分配资源
  • 资源释放层:ApplicationMaster 释放已完成作业占用的资源

1.2 支持的调度器

YARN 支持三种调度器:

  • FIFO Scheduler:先进先出调度器,按作业提交顺序分配资源
  • Capacity Scheduler:容量调度器,通过队列实现资源隔离和共享
  • Fair Scheduler:公平调度器,动态平衡资源分配,实现公平共享

EMR 支持配置 Capacity Scheduler 和 Fair Scheduler 两种调度器。

二、Capacity Scheduler 原理与配置

2.1 Capacity Scheduler 原理

Capacity Scheduler 采用多级队列的树状结构,每个队列配置有最小容量、最大容量、用户限制等参数。

核心特性:

  • 分层队列结构:支持多级队列嵌套,父队列通过 capacity 参数为子队列分配固定比例的资源
  • 容量预留:每个队列可配置最小资源占比,保证队列有基本的资源保障
  • 弹性资源共享:空闲资源可被其他队列借用,提升资源利用率
  • 用户限制:可以限制每个用户使用的资源量,避免单个用户占用过多资源

2.2 资源分配过程

Capacity Scheduler 的资源分配过程遵循以下原则:

  1. 检查父队列资源剩余量
  2. 验证子队列的最小容量约束
  3. 应用 DRF(Dominant Resource Fairness)算法计算实际分配量

分配过程遵循"深度优先"原则,优先满足层级较高的队列的资源需求。

2.3 在腾讯云 EMR 中配置 Capacity Scheduler

在 EMR 配置 Capacity Scheduler 的步骤:

  1. 登录 EMR 控制台,在集群列表中选择对应的 Hadoop 集群,单击"详情"进入集群详情页
  2. 在集群详情页中选择"集群服务 > Yarn 组件卡页",单击右上角"操作 > 资源调度",进入资源调度页面
  3. 单击"资源调度器开关",打开开关后即可进行相关调度器配置
  4. 调度策略类型选择"Capacity Scheduler",即可进入 Capacity Scheduler 的配置页面
  5. 单击"新增资源池",即可新建资源池

字段与配置项对照表

字段名称

对应参数名称

参数含义

资源池名称

yarn.scheduler.capacity.<queue-path>.queues

资源池的名称或队列的名称

标签设置

设置队列可以访问的特定标签

容量

yarn.scheduler.capacity.<queue-path>.capacity

可以使用的资源大小,同一父资源池的子池容量总和为 100

最大容量

yarn.scheduler.capacity.<queue-path>.maximum-capacity

队列的资源使用上限(百分比)

默认标签表达式

yarn.scheduler.capacity.<queue-path>.default-node-label-expression

当资源请求未指定节点标签时,应用将被提交到该值对应的分区

用户最小容量

yarn.scheduler.capacity.<queue-path>.minimum-user-limit-percent

每个用户最低资源保障(百分比)

2.4 Capacity Scheduler 适用场景

Capacity Scheduler 适合以下场景:

  • 需要 SLA 保障的核心业务系统
  • 资源划分严格的多部门企业,如按部门划分队列
  • 超大规模集群(节点数较多)

三、Fair Scheduler 原理与配置

3.1 Fair Scheduler 原理

Fair Scheduler 通过"最大最小公平算法"实现动态资源分配,确保所有应用在一段时间内获得大致相等的资源。

核心特性:

  • 基于权重的资源分配:通过 weight 参数调整资源分配比例
  • 支持资源抢占:当高优先级应用资源不足时,可抢占低优先级应用的 Container
  • 最小共享量保障:通过 minResources 参数保障队列的最低资源需求

3.2 资源分配过程

Fair Scheduler 的资源分配过程:

  1. 计算各应用的资源使用偏差
  2. 优先调度资源不足的应用
  3. 定期重新平衡资源分配

当新任务加入时,调度器会重新计算资源差值(当前分配量 - 应得量),触发资源再平衡。

3.3 在腾讯云 EMR 中配置 Fair Scheduler

在 EMR 中配置 Fair Scheduler 的步骤:

  1. 登录 EMR 控制台,在集群列表中选择对应的 Hadoop 集群,单击"详情"进入集群详情页
  2. 在集群详情页中选择"集群服务 > Yarn 组件卡页",单击右上角"操作 > 资源调度",进入资源调度页面
  3. 单击"资源调度器开关",调度器类型选择"Fair Scheduler"
  4. 单击"新建资源池",根据实际需求进行配置
  5. 配置放置规则,定义作业与队列的映射关系

计划模式配置

Fair Scheduler 支持计划模式,可以根据业务时间需要调整资源池配置。配置步骤:

  1. 在资源调度页中选择"计划模式 > 新建计划模式"
  2. 选择/填写配置集、名称和计划有效时间
  3. 在不同的计划模式中,资源池的资源量限制相互独立,可以按照业务分别进行配置

3.4 Fair Scheduler 适用场景

Fair Scheduler 适合以下场景:

  • 研发测试环境,需要灵活应对临时性分析任务
  • 业务波动大的场景,需要动态调整资源分配
  • 混合负载集群,既有长期运行批处理作业又有临时交互任务

四、Capacity Scheduler vs Fair Scheduler 对比

4.1 原理对比

对比维度

Capacity Scheduler

Fair Scheduler

资源分配方式

按队列容量比例分配

动态平衡,公平共享

资源隔离

强隔离,每个队列有最小容量保障

弱隔离,通过最小共享量保障

资源弹性

支持资源借用,但有最大容量限制

完全弹性,根据需求动态分配

调度策略

队列内采用 FIFO 或 Fair 排序

全局公平调度

4.2 配置对比

对比维度

Capacity Scheduler

Fair Scheduler

配置格式

层级 properties 文件

XML 配置文件

配置约束

同一父队列的子队列容量总和为 100%

子队列资源总和可超过父队列容量

配置灵活性

较低,配置错误会导致调度器无法启动

较高,配置错误会降级到默认配置

计划模式

不支持

支持,可根据时间调整配置

4.3 功能对比

对比维度

Capacity Scheduler

Fair Scheduler

节点标签

支持,可实现硬件资源隔离

支持

资源抢占

支持(Hadoop 2.8+)

支持

动态队列

不支持

支持,可通过 API 实时创建临时队列

多层调度

支持,可在队列内配置 FIFO 或 Fair 排序

支持,不同队列可配置不同调度策略

4.4 性能对比

对比维度

Capacity Scheduler

Fair Scheduler

调度吞吐量

较高,适合大规模集群

较高,但抢占机制会增加开销

小任务响应

较慢,需要等待队列资源

较快,动态分配资源

大任务延迟

可能延迟,受队列容量限制

可能延迟,受公平调度影响

资源利用率

较高,支持资源借用

高,动态分配资源

五、如何选择合适的调度策略

5.1 选择原则

选择 YARN 资源调度策略时,需要考虑以下因素:

  • 业务类型:是批处理作业为主,还是交互式查询为主
  • 用户规模:是单用户使用,还是多租户共享
  • 资源需求:是需要严格的资源隔离,还是灵活的资源共享
  • 集群规模:集群规模大小,节点数量多少

5.2 场景推荐

选择 Capacity Scheduler 的场景

  • 多部门共享的生产集群,需要严格的资源隔离
  • 有 SLA 要求的业务,需要保障最低资源
  • 超大规模集群,需要稳定的调度性能

选择 Fair Scheduler 的场景

  • 研发测试环境,需要灵活应对临时任务
  • 混合负载集群,既有批处理又有交互式查询
  • 业务波动大,需要动态调整资源分配

5.3 混合使用

在某些情况下,可以混合使用两种调度策略:

  • 在 Capacity Scheduler 的队列内,可以配置 Fair 排序策略
  • 在 Fair Scheduler 中,可以为不同队列配置不同的调度策略

六、腾讯云EMR 中配置 YARN 资源调度的最佳实践

6.1 队列规划

  • 根据业务需求划分队列,避免队列过多导致管理复杂
  • 为重要业务设置专用的队列,保障资源需求
  • 设置合理的队列容量,避免资源浪费或不足

6.2 资源配置

  • 设置队列的最大容量,避免单个队列占用过多资源
  • 设置用户最小容量限制,避免单个用户占用过多资源
  • 根据业务特点调整资源分配参数

6.3 监控和调优

  • 监控队列的资源使用情况,及时调整配置
  • 查看作业的资源使用情况,优化作业配置
  • 定期审查调度策略,根据业务变化调整

七、常见问题排查

7.1 作业资源分配不足

可能的原因:

  • 队列容量配置过小
  • 其他队列占用了过多资源
  • 用户达到了资源使用上限

排查步骤:

  1. 检查队列容量配置
  2. 检查集群资源使用情况
  3. 检查用户资源限制配置

7.2 调度器配置不生效

可能的原因:

  • 配置文件格式错误
  • 配置未部署生效
  • 调度器类型选择错误

排查步骤:

  1. 检查配置文件格式
  2. 在 EMR 控制台中单击"部署生效"
  3. 检查调度器类型是否正确

7.3 资源隔离不满足需求

可能的原因:

  • 队列最大容量配置过大
  • 未启用资源抢占
  • 节点标签配置不正确

排查步骤:

  1. 调整队列最大容量配置
  2. 启用资源抢占功能
  3. 检查节点标签配置

了解更多产品详情:腾讯云 EMR 产品页

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 摘要:
  • 一、YARN 资源调度概述
    • 1.1 YARN 的三层调度模型
    • 1.2 支持的调度器
  • 二、Capacity Scheduler 原理与配置
    • 2.1 Capacity Scheduler 原理
    • 2.2 资源分配过程
    • 2.3 在腾讯云 EMR 中配置 Capacity Scheduler
    • 2.4 Capacity Scheduler 适用场景
  • 三、Fair Scheduler 原理与配置
    • 3.1 Fair Scheduler 原理
    • 3.2 资源分配过程
    • 3.3 在腾讯云 EMR 中配置 Fair Scheduler
    • 3.4 Fair Scheduler 适用场景
  • 四、Capacity Scheduler vs Fair Scheduler 对比
    • 4.1 原理对比
    • 4.2 配置对比
    • 4.3 功能对比
    • 4.4 性能对比
  • 五、如何选择合适的调度策略
    • 5.1 选择原则
    • 5.2 场景推荐
    • 5.3 混合使用
  • 六、腾讯云EMR 中配置 YARN 资源调度的最佳实践
    • 6.1 队列规划
    • 6.2 资源配置
    • 6.3 监控和调优
  • 七、常见问题排查
    • 7.1 作业资源分配不足
    • 7.2 调度器配置不生效
    • 7.3 资源隔离不满足需求
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档