You need to enable JavaScript to run this app.
导航

进阶使用

最近更新时间2023.10.16 22:09:34

首次发布时间2022.08.19 18:17:18

1 队列设置

EMR 中 YARN 默认使用 CapacityScheduler 调度器,如有需要,可在 EMR页面服务列表 > YARN > 服务参数 > yarn-site 中,配置 yarn.resourcemanager.scheduler.class 参数。
以下队列配置如果没有特别声明,默认通过EMR页面服务列表 > YARN > 服务参数 > capacity-scheduler 进行修改。

1.1 队列基本设置

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 越容易申请到资源。
更多参数可参考https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/CapacityScheduler.html

除按比例配置队列容量,还可以使用yarn.scheduler.capacity.<queue-path>.capacityyarn.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特定队列中可同时运行的最大作业数量。

更多队列基本设置可参照 https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/CapacityScheduler.html

1.2 队列权限设置

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设置拥有该队列管理权限的用户。

1.3 抢占配置

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指定队列不支持队列内抢占,默认继承上层队列设置的值。