
本文深入解析 YARN 的两种资源调度策略——Capacity Scheduler 和 Fair Scheduler,从原理、配置、适用场景等维度进行对比,帮助您选择适合业务需求的调度策略。
YARN(Yet Another Resource Negotiator)是 Hadoop 的生态中的资源管理和作业调度框架。ResourceManager 中的 Scheduler 组件负责资源分配,决定如何将集群资源分配给各个作业。
YARN 的调度模型分为三层:
YARN 支持三种调度器:
EMR 支持配置 Capacity Scheduler 和 Fair Scheduler 两种调度器。
Capacity Scheduler 采用多级队列的树状结构,每个队列配置有最小容量、最大容量、用户限制等参数。
核心特性:
Capacity Scheduler 的资源分配过程遵循以下原则:
分配过程遵循"深度优先"原则,优先满足层级较高的队列的资源需求。
在 EMR 配置 Capacity Scheduler 的步骤:
字段与配置项对照表:
字段名称 | 对应参数名称 | 参数含义 |
|---|---|---|
资源池名称 | 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 | 每个用户最低资源保障(百分比) |
Capacity Scheduler 适合以下场景:
Fair Scheduler 通过"最大最小公平算法"实现动态资源分配,确保所有应用在一段时间内获得大致相等的资源。
核心特性:
Fair Scheduler 的资源分配过程:
当新任务加入时,调度器会重新计算资源差值(当前分配量 - 应得量),触发资源再平衡。
在 EMR 中配置 Fair Scheduler 的步骤:
计划模式配置:
Fair Scheduler 支持计划模式,可以根据业务时间需要调整资源池配置。配置步骤:
Fair Scheduler 适合以下场景:
对比维度 | Capacity Scheduler | Fair Scheduler |
|---|---|---|
资源分配方式 | 按队列容量比例分配 | 动态平衡,公平共享 |
资源隔离 | 强隔离,每个队列有最小容量保障 | 弱隔离,通过最小共享量保障 |
资源弹性 | 支持资源借用,但有最大容量限制 | 完全弹性,根据需求动态分配 |
调度策略 | 队列内采用 FIFO 或 Fair 排序 | 全局公平调度 |
对比维度 | Capacity Scheduler | Fair Scheduler |
|---|---|---|
配置格式 | 层级 properties 文件 | XML 配置文件 |
配置约束 | 同一父队列的子队列容量总和为 100% | 子队列资源总和可超过父队列容量 |
配置灵活性 | 较低,配置错误会导致调度器无法启动 | 较高,配置错误会降级到默认配置 |
计划模式 | 不支持 | 支持,可根据时间调整配置 |
对比维度 | Capacity Scheduler | Fair Scheduler |
|---|---|---|
节点标签 | 支持,可实现硬件资源隔离 | 支持 |
资源抢占 | 支持(Hadoop 2.8+) | 支持 |
动态队列 | 不支持 | 支持,可通过 API 实时创建临时队列 |
多层调度 | 支持,可在队列内配置 FIFO 或 Fair 排序 | 支持,不同队列可配置不同调度策略 |
对比维度 | Capacity Scheduler | Fair Scheduler |
|---|---|---|
调度吞吐量 | 较高,适合大规模集群 | 较高,但抢占机制会增加开销 |
小任务响应 | 较慢,需要等待队列资源 | 较快,动态分配资源 |
大任务延迟 | 可能延迟,受队列容量限制 | 可能延迟,受公平调度影响 |
资源利用率 | 较高,支持资源借用 | 高,动态分配资源 |
选择 YARN 资源调度策略时,需要考虑以下因素:
选择 Capacity Scheduler 的场景:
选择 Fair Scheduler 的场景:
在某些情况下,可以混合使用两种调度策略:
可能的原因:
排查步骤:
可能的原因:
排查步骤:
可能的原因:
排查步骤:
了解更多产品详情:腾讯云 EMR 产品页
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。