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

E-MapReduce

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

EMR 中 YARN 默认使用 Capacity Scheduler 调度器,并为您提供了便捷的界面化的队列管理配置能力,您也可使用命令方式更灵活地进行 Capacity Scheduler 调度器的队列配置,本文为您介绍Capacity Scheduler 调度器的队列配置详情。

背景信息

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

对比维度

CapacityScheduler

FairScheduler

核心目标

保证各队列获得预设容量

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

资源配置方式

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

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

空闲资源

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

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

资源竞争

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

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

抢占逻辑

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

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

配置文件

capacity-scheduler.xml

fair-scheduler.xml

典型场景

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

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

EMR 默认情况

EMR 中 YARN 默认使用

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

本文为您介绍 Capacity Scheduler 调度器的队列资源与调度规则的配置详情,当前支持在 EMR 控制台界面进行配置,也可登录 YARN 服务器通过配置文件来进行设置。

说明

如果您希望使用 Fair Scheduler 调度器,可手动将调度器切换为 Fair Scheduler,并进行设置,详情请参见队列管理:Fair Scheduler。

注意与前提
  • 前提条件
    • 已创建包含 YARN 服务的集群,详细步骤请参见:创建集群。
    • EMR 版本高于 4.0.0。软件栈版本及所含服务的信息,请参见:EMR 版本概述。
  • 注意事项
    • 执行队列结构变更前,先停止相关队列,再按适用的生效方式处理,并验证变更结果。
    • 保持调度规则与已有队列配置兼容,并确保两条规则的触发时刻至少间隔 300 秒。
    • 在生产环境使用前,先完成测试环境验证。变更后检查执行结果、应用状态及资源监控,并保留操作日志。

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

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

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

进入队列管理页面

  1. 登录 EMR 控制台,在左侧导航栏选择 集群管理 > EMR on ECS。单击目标集群的名称,进入集群详情页面,选择 服务列表 页签,在服务列表中单击 YARN。
  2. 在 YARN 服务页面,单击 队列管理 页签进入队列管理页面。
    Image
    • 队列配置 页签以树状结构展示当前集群的所有 YARN 队列。您可以查看队列状态、容量及层级关系,并执行相关管理操作。
    • YARN 队列是树状组织的,所有队列都是 root 队列的子队列,EMR 为您预置了 root 父队列及一个默认的 default 子队列,您可根据需要创建更多子队列并分配各个子队列的容量占比等。

队列配置

添加子队列

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

    参数

    说明

    容量占比(%)

    队列的容量占比。同一父队列下所有子队列的容量占比之和必须为 100。

    最大容量占比(%)

    存在空闲资源时,允许队列使用超过其容量占比的资源,最高不超过最大容量占比。该值不得小于容量占比。

    状态

    控制子队列是否启用。

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

队列修改与管理

您可以在队列管理页面查看 YARN 队列的队列列表,对于子队列,您可单击 修改 按钮,编辑修改队列的 容量参数、状态等;也可为 root 父级队列添加新的子队列。
Image

配置潮汐调度规则

添加潮汐调度规则

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

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

    参数

    说明

    规则名称

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

    队列配置

    设置当前调度规则适用的队列,您可在下拉框中选择已有的子队列,并设置当前调度规则下,对应子队列的容量占比(%)、最大容量占比(%)。

    • 所有子队列的的 容量占比(%) 取值之和需要为 100。
    • 最大容量占比(%) 取值需大于 容量占比(%) 取值。

    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

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

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

队列基本设置

YARN 队列是树状组织的,所有队列都是 root 队列的子队列,队列路径表示队列的层级关系,不同层级间通过.进行分隔。集群所有资源都挂在 root 队列下,子队列可以根据配置划分父队列的资源(不指定划分默认可以共用父队列的资源)
可以通过以下配置设置队列。

<property>
  <name>yarn.scheduler.capacity.root.queues</name>
  <value>a,b,c</value> #设置root队列下有三个子队列,分别为root.a,root.b和root.c,可以共用root 队列的总资源
  <description>The queues at the this level (root is the root queue).
  </description>
</property>

<property>
  <name>yarn.scheduler.capacity.root.a.queues</name>
  <value>a1,a2</value> # root.a队列下又划分两个子队列,分别问root.a.a1和root.a.a2
  <description>The queues at the this level (root is the root queue).
  </description>
</property>

<property>
  <name>yarn.scheduler.capacity.root.b.queues</name>
  <value>b1,b2,b3</value> # root.b.b1,roor.b.b2,root.b.b3
  <description>The queues at the this level (root is the root queue).
  </description>
</property>

对于每个队列路径,例如 root.a.a1,可以在配置文件中配置队列用量的基本属性

参数

说明

yarn.scheduler.capacity..capacity

队列容量,浮点数,表示队列的最小容量( YARN 保证该队列可获取的资源)。一旦配置,要保证该队列的父队列下所有子队列的加和恰好为 100,否则会出现错误。运行过程中,该队列中的应用资源用量可能超过配置的最小容量(其余子队列中有空余资源,为保证资源利用率,可以暂时使用其余子队列的资源)。

yarn.scheduler.capacity..maximum-capacity

队列最大用量,浮点数,表示队列最多使用的资源。配置有效值在 0-100 之间,也可以设置 -1 代表 100%,需要保证该队列的父队列下所有子队列的加和大于等于 100,否则会出现部分资源无法使用的问题。

yarn.scheduler.capacity..maximum-allocation-vcores

队列中应用最大可申请的 vcores 数量。

yarn.scheduler.capacity..maximum-allocation-mb

队列中应用最大可申请的内存大小。

yarn.scheduler.capacity..user-settings..weight

按user分配队列中资源使用的比重,比重越大的 user 越容易申请到资源。

更多参数

可参考开源配置参数说明文档

除按比例配置队列容量,还可以使用yarn.scheduler.capacity.<queue-path>.capacity和yarn.scheduler.capacity.<queue-path>.max-capacity配置绝对容量,比如[memory=10240,vcores=12]。
还可通过配置限定队列中的作业数量

参数

说明

yarn.scheduler.capacity.maximum-applications

队列中可运行的最大作业数量,全局配置,默认为10000。到达该数量后继续向同一队列提交作业会被拒绝。

yarn.scheduler.capacity..maximum-applications

特定队列中可运行的最大作业数量。

yarn.scheduler.capacity.maximum-am-resource-percent

队列中 ApplicationMaster 资源占用最大比例,全局配置,有效值0-1之间,默认是0.1。

yarn.scheduler.capacity..maximum-am-resource-percent

特定队列中 ApplicationMaster 资源占用最大比例。

yarn.scheduler.capacity.max-parallel-apps

队列中可同时运行的最大作业数量,全局配置,与maximum-applications的不同是,达到该数量之后继续提交的作业不会被拒绝,而是会停留在 ACCEPTED 状态等待。

yarn.scheduler.capacity..max-parallel-apps

特定队列中可同时运行的最大作业数量。

更多队列基本设置可参照 开源参数配置说明文档。

队列权限设置

YARN 队列支持为用户设置特定的访问权限,特定队列的访问权限分为两种:提交作业权限和队列管理权限。
开启队列权限需要在 yarn-site 中设置 yarn.acl.enable 为 true(若 yarn 开启 ranger 权限管控则该配置默认为 true,但该种情况建议使用 ranger 管理 YARN 的队列权限,不建议再重复设置)。
可通过设置 yarn.admin.acl 来指定特定用户拥有 YARN admin 的操作权限,默认为 yarn 用户。用户的设置逻辑为:

  • 多用户间用逗号分隔
  • 为空表示没有任何用户有该项权限
  • 可用*表示任意用户都有该权限

设置特定队列的权限:

参数

说明

yarn.scheduler.capacity.root..acl_submit_applications

设置拥有该队列提交作业权限的用户。

yarn.scheduler.capacity.root..acl_administer_queue

设置拥有该队列管理权限的用户。

抢占配置

Yarn 支持任务抢占。任务抢占分为队列间抢占和队列内抢占,其中队列间的抢占默认开启。如果要配置抢占,需要在 yarn-site.xml 里打开抢占功能,并在 capacity-scheduler.xml 里做具体配置。

  • yarn-site.xml

    参数

    说明

    yarn.resourcemanager.scheduler.monitor.enable

    是否打开抢占功能,默认 false

  • capacity-scheduler.xml

    参数

    说明

    yarn.resourcemanager.monitor.capacity.preemption.intra-queue-preemption.enabled

    是否打开队列内抢占,默认 false

    yarn.resourcemanager.monitor.capacity.preemption.intra-queue-preemption.preemption-order-policy

    应用的排序策略,分为 userlimit_first 和 priority_first,前者为用户配额抢占,后者为优先级抢占。默认 userlimit_first

    yarn.scheduler.capacity..disable_preemption

    指定队列不可被抢占,默认继承上层队列设置的值。

    yarn.scheduler.capacity..intra-queue-preemption.disable_preemption

    指定队列不支持队列内抢占,默认继承上层队列设置的值。

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