EMR 中 YARN 默认使用 CapacityScheduler 调度器,如有需要,可在 EMR页面服务列表 > YARN > 服务参数 > yarn-site 中,配置 yarn.resourcemanager.scheduler.class 参数。
以下队列配置如果没有特别声明,默认通过EMR页面服务列表 > YARN > 服务参数 > capacity-scheduler 进行修改。
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. | 队列容量,浮点数,表示队列的最小容量( YARN 保证该队列可获取的资源)。一旦配置,要保证该队列的父队列下所有子队列的加和恰好为 100,否则会出现错误。运行过程中,该队列中的应用资源用量可能超过配置的最小容量(其余子队列中有空余资源,为保证资源利用率,可以暂时使用其余子队列的资源)。 |
yarn.scheduler.capacity. | 队列最大用量,浮点数,表示队列最多使用的资源。配置有效值在 0-100 之间,也可以设置 -1 代表 100%,需要保证该队列的父队列下所有子队列的加和大于等于 100,否则会出现部分资源无法使用的问题。 |
yarn.scheduler.capacity. | 队列中应用最大可申请的 vcores 数量。 |
yarn.scheduler.capacity. | 队列中应用最大可申请的内存大小。 |
yarn.scheduler.capacity. | 按user分配队列中资源使用的比重,比重越大的 user 越容易申请到资源。 |
更多参数 | 可参考https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/CapacityScheduler.html |
除按比例配置队列容量,还可以使用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. | 特定队列中可运行的最大作业数量。 |
yarn.scheduler.capacity.maximum-am-resource-percent | 队列中 ApplicationMaster 资源占用最大比例,全局配置,有效值0-1之间,默认是0.1。 |
yarn.scheduler.capacity. | 特定队列中 ApplicationMaster 资源占用最大比例。 |
yarn.scheduler.capacity.max-parallel-apps | 队列中可同时运行的最大作业数量,全局配置,与maximum-applications的不同是,达到该数量之后继续提交的作业不会被拒绝,而是会停留在 ACCEPTED 状态等待。 |
yarn.scheduler.capacity. | 特定队列中可同时运行的最大作业数量。 |
更多队列基本设置可参照 https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/CapacityScheduler.html
YARN 队列支持为用户设置特定的访问权限,特定队列的访问权限分为两种:提交作业权限和队列管理权限。
开启队列权限需要在 yarn-site 中设置 yarn.acl.enable 为 true(若 yarn 开启 ranger 权限管控则该配置默认为 true,但该种情况建议使用 ranger 管理 YARN 的队列权限,不建议再重复设置)。
可通过设置 yarn.admin.acl 来指定特定用户拥有 YARN admin 的操作权限,默认为 yarn 用户。用户的设置逻辑为:
多用户间用逗号分隔
为空表示没有任何用户有该项权限
可用*
表示任意用户都有该权限
设置特定队列的权限:
参数 | 说明 |
---|---|
yarn.scheduler.capacity.root. | 设置拥有该队列提交作业权限的用户。 |
yarn.scheduler.capacity.root. | 设置拥有该队列管理权限的用户。 |
Yarn 支持任务抢占。任务抢占分为队列间抢占和队列内抢占,其中队列间的抢占默认开启。如果要配置抢占,需要在 yarn-site.xml
里打开抢占功能,并在 capacity-scheduler.xml
里做具体配置。
参数 | 说明 |
---|---|
yarn.resourcemanager.scheduler.monitor.enable | 是否打开抢占功能,默认 false |
参数 | 说明 |
---|---|
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. | 指定队列不可被抢占,默认继承上层队列设置的值。 |
yarn.scheduler.capacity. | 指定队列不支持队列内抢占,默认继承上层队列设置的值。 |