You need to enable JavaScript to run this app.
文档中心
E-MapReduce

E-MapReduce

复制全文
下载 pdf
YARN 队列管理
队列管理:Fair Scheduler
复制全文
下载 pdf
队列管理:Fair Scheduler

EMR YARN 默认使用 Capacity Scheduler。业务需要多个队列动态、公平地共享集群资源时,可切换为 Fair Scheduler。本文介绍如何启用 Fair Scheduler 以及参数的手动配置方法。

背景信息

EMR YARN 队列支持 Capacity Scheduler(默认)、Fair Scheduler 两类调度器,可满足不同场景下资源分配与调度的诉求,两类调度器对比介绍如下。

对比维度

CapacityScheduler

FairScheduler

核心目标

保证各队列获得预设容量

让活跃队列或作业逐步获得公平份额

资源配置方式

主要按容量比例或绝对资源配置,如队列占 30%

主要配置最小/最大资源和权重

空闲资源

队列可临时借用其他队列未使用的资源,但受最大容量限制

空闲资源会动态分给有任务的队列

资源竞争

更强调组织间的容量保障和隔离

更强调共享集群时的动态公平

抢占逻辑

可通过抢占机制收回超出保障份额的资源

可在队列长期低于公平份额时触发抢占

配置文件

capacity-scheduler.xml

fair-scheduler.xml

典型场景

多部门、多租户,资源预算和配额相对明确

多用户共享集群,任务量变化明显,希望减少小任务等待

EMR 默认情况

EMR 中 YARN 默认使用

需要修改调度器配置并部署 Fair 队列文件

本文为您介绍如何从默认的 Capacity Scheduler 调度器切换为 Fair Scheduler 调度器,并进行队列资源与调度规则的配置。

说明

Capacity Scheduler 调度器的队列资源与调度规则的配置详情请参见 队列管理:Capacity Scheduler。

注意与前提
  • 前提条件
    • 已创建包含 YARN 服务的集群,详细步骤请参见:创建集群。
    • EMR 版本高于 4.0.0。软件栈版本及所含服务的信息,请参见:EMR 版本概述。
  • 注意事项
    • 切换调度器时,需手动检查并处理队列配置与调度规则的兼容性。并根据集群的实际资源情况和应用程序的需求合理设置最小和最大资源限制、权重等参数,以避免资源浪费或过度竞争。
    • 执行队列结构变更前,先停止相关队列,再按适用的生效方式处理,并验证变更结果。
    • 保持调度规则与已有队列配置兼容,并确保两条规则的触发时刻至少间隔 300 秒。
    • 在生产环境使用前,建议在测试环境中充分测试 Fair 队列配置的有效性和稳定性后再应用到生产集群,变更后检查执行结果、应用状态及资源监控,并保留操作日志。

切换启用 Fair Scheduler
  1. 进入 EMR 集群详情页,选择 服务列表 > YARN > 服务参数。
  2. 将 yarn.resourcemanager.scheduler.class 设置为 org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler。
    Image
  3. 将 yarn.resourcemanager.scheduler.monitor.enable 设置为 false。
  4. 保存配置,填写操作备注后,按控制台提示执行服务重启。
  5. 完成重启后,您可在队列管理页面查看当前的调度器类型,确认策略已切换为 Fair Scheduler,即可进行队列和调度规则配置。
    Image

队列与调度配置:界面操作

EMR 控制台提供了可视化的 YARN 队列管理功能,支持新增队列、修改队列配置、调整队列层级、启停队列等操作。
队列管理包含以下两个页签:

  • 队列配置:管理队列层级及队列参数。
  • 调度规则:在指定时间自动切换队列参数,适用于白天保障在线业务、夜间为离线作业分配更多资源等潮汐场景。

队列配置

添加子队列

  1. 在队列管理页面的 队列配置 页签中,单击右上方的 添加队列,在弹出的侧边框中配置队列参数。
    Image
    新增子队列时,默认父级队列为 root 队列,您可按需单击添加队列为 root 父队列添加更多子队列,并调整所有子队列的队列名称、权重等参数,子队列的核心配置参数如下。

    参数

    说明

    weight

    同一父队列下各子队列的相对资源分配权重,不代表任务执行优先级。其他条件相同时,权重越大,公平份额越大;实际资源使用仍受资源需求及资源上下限约束。

    minResources

    队列的最小资源份额。当资源不足且队列尚未达到该份额时,调度器优先向其分配可用资源。如果资源已被运行中的应用占用,不保证队列立即达到该份额。
    minResource 支持以下三种资源配置方式:

    • 相对资源:填写整数百分比。
    • 绝对资源:分别填写 vCPU 核数和内存大小,均为整数。
    • 资源百分比:分别填写 vCPU 和内存的百分比,均为整数。

    maxResources

    队列可分配资源的上限,同时受父队列资源上限约束。
    maxResources 支持以下三种资源配置方式:

    • 相对资源:填写整数百分比。
    • 绝对资源:分别填写 vCPU 核数和内存大小,均为整数。
    • 资源百分比:分别填写 vCPU 和内存的百分比,均为整数。

    maxRunningApps

    队列内同时运行的应用数量上限。

    schedulingPolicy

    控制队列内的资源分配方式:

    • DRF:按主导资源公平分配,兼顾 CPU 和内存。
    • FAIR:按公平份额分配,默认主要考虑内存。
    • FIFO:优先向较早提交的应用分配资源,不代表应用必须串行执行。

    操作备注

    为当前调度规则添加操作备注。

  2. 配置完成后,单击 确定 完成子队列添加。

队列修改与管理

您可以在队列管理页面查看 YARN 队列的队列列表,对于子队列,您可单击 修改 按钮,编辑修改队列的权重、资源分配逻辑等;也可为 root 父级队列添加新的子队列。
Image

配置调度规则

添加调度规则

潮汐调度规则适用于集群资源需求随时间周期性变化的场景。您可以根据业务高峰和低峰分别配置调度规则,例如早上 8 点提高分析师任务队列的资源占比,晚上 8 点再调整为离线任务优先,通过潮汐调度规则在指定时间自动切换 YARN 子队列的资源分配策略,减少人工操作,并提升集群资源利用率和业务高峰期的资源保障能力。

  1. 在队列管理页面的 调度规则 页签中,单击右上方的 添加规则,在弹出的侧边框中配置队列参数。
    Image

    参数

    说明

    规则名称

    自定义调度规则的名称,用于后续查询、标识。

    队列配置

    设置当前调度规则适用的队列,您可在下拉框中选择已有的子队列,并设置当前调度规则下,对应子队列的权重、资源分类逻辑等。

    Cron 表达式

    使用 Cron 表达式设置调度执行周期。

    • cron 表达式通常由 5 个字段组成,从左到右依次是:分钟(0–59)、小时(0–23)、日期(1–31)、月份(1–12)、星期(0–7,0 和 7 都代表周日,1 代表周一)。
    • 支持以下几种特殊符号:* 表示该字段每个值都匹配;, 用于枚举多个值,如 1,3,5;- 用于表示范围,如 1-5;/ 用于设置步长,如 */10 表示每隔 10 个单位。
    • 几个常用例子:0 8 * * 1 是每周一 8 点,0 9 * * 1-5 是工作日每天 9 点,*/15 9-18 * * 1-5 是工作日 9 到 18 点每 15 分钟,0 0 1 * * 是每月 1 日零点。

    操作备注

    为当前调度规则添加操作备注。

  2. 完成配置后,单击 添加,完成调度规则配置。

  3. 您可按需配置多个调度规则。

启停与管理调度规则

您可以在调度规则页面查看已添加的调度规则列表。
Image

  • 您可以查看各个调度规则的状态、子队列的容量分配情况等。
  • 也可以按需设置停止、启动对应调度规则,或编辑、删除对应调度规则。

队列与调度配置:命令行操作

当需要使用控制台未覆盖的参数时,例如配置用户到队列的映射,设置队列的抢占策略时,可参考以下手动配置方法。

step1:创建 Fair 队列配置文件

  1. 登录到运行 Yarn 的服务器节点。

  2. 使用文本编辑器(如 vi 或 nano)创建一个新的配置文件,例如 fair-scheduler.xml。

  3. 在配置文件中,首先定义根队列(root queue),这是所有其他队列的父队列。

    <allocations><queue name="root"><minResources>10000 mb,0 vcores</minResources><maxResources>40000 mb,4 vcores</maxResources><weight>1.0</weight><schedulingPolicy>fair</schedulingPolicy></queue></allocations>
    

    这里定义了根队列的最小资源(10000MB 内存和 0 个虚拟核心)、最大资源(40000MB 内存和 4 个虚拟核心)、权重(1.0)以及调度策略为 fair。

step2:修改配置参数

您可在配置文件中进行更多的配置参数设置,以下为一些典型场景的配置示例。

添加子队列

在根队列内部,可以添加多个子队列。例如,添加两个子队列 queue1 和 queue2:

<queue name="queue1"><minResources>5000 mb,0 vcores</minResources><maxResources>20000 mb,2 vcores</maxResources><weight>2.0</weight><schedulingPolicy>fair</schedulingPolicy></queue><queue name="queue2"><minResources>3000 mb,0 vcores</minResources><maxResources>15000 mb,1 vcores</maxResources><weight>1.5</weight><schedulingPolicy>fair</schedulingPolicy></queue>

每个子队列都有自己的最小和最大资源限制、权重以及调度策略。权重决定了队列在资源分配中的相对重要性。

配置用户到队列的映射

如果需要将特定用户的应用程序分配到特定队列,可以配置用户到队列的映射。例如,将用户 user1 的应用程序分配到 queue1,用户 user2 的应用程序分配到 queue2:

<user name="user1"><queue>queue1</queue></user><user name="user2"><queue>queue2</queue></user>

(可选)设置队列的抢占策略

如果希望队列能够在资源不足时抢占其他队列的资源,可以配置抢占策略。例如,允许 queue1 在资源不足时抢占其他队列的资源:

  1. 将 yarn.resourcemanager.scheduler.monitor.enable 设置为 true。

  2. 修改抢占策略

    <queue name="queue1"><minResources>5000 mb,0 vcores</minResources><maxResources>20000 mb,2 vcores</maxResources><weight>2.0</weight><schedulingPolicy>fair</schedulingPolicy><queueMaxAMShare>0.5</queueMaxAMShare><fairSharePreemptionTimeout>60000</fairSharePreemptionTimeout><fairSharePreemptionThreshold>0.5</fairSharePreemptionThreshold></queue>
    

    这里的 queueMaxAMShare 表示队列中应用程序的最大资源分配比例,fairSharePreemptionTimeout 表示抢占超时时间(毫秒),fairSharePreemptionThreshold 表示抢占阈值。

step3:保存并部署配置文件

  1. 保存 fair-scheduler.xml 配置文件。

  2. 将配置文件复制到 Yarn 的配置目录中,通常为 $HADOOP_HOME/etc/hadoop/ 目录。

  3. 在 Yarn 的配置文件 yarn-site.xml 中,添加或修改以下属性,指定使用 Fair 调度器和配置文件路径:(可以在组件管理 - 服务管理 - Yarn - 配置文件中修改)

    <property><name>yarn.resourcemanager.scheduler.class</name><value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value></property><property><name>yarn.scheduler.fair.allocation.file</name><value>/path/to/fair-scheduler.xml</value></property>
    

    确保将 /path/to/fair-scheduler.xml 替换为实际的配置文件路径。

step4:重启 Yarn 服务

在EMR对应集群的 组件管理 - 服务管理 - Yarn中重启Resource Manager以及所有Node Manager。

step5:验证配置

提交一些应用程序到 Yarn 集群,并查看它们是否按照 Fair 队列的配置进行资源分配。可以使用 Yarn 的命令行工具(如 yarn application -list 等)来查看应用程序的运行状态和资源分配情况。

最近更新时间:2026.10.30 10:38:44
这个页面对您有帮助吗?
有用
有用
无用
无用