功能介绍
Capacity Scheduler 是容量调度器,容量调度器以分层的方式组织资源,可通过多层级的资源限制条件让多用户共享集群资源。
操作步骤
新建资源池
1. 登录 EMR 控制台,在集群列表中选择对应的 Hadoop 集群单击详情进入集群详情页。
2. 在集群详情页中选择集群服务 > Yarn 组件卡页右上角操作 > 资源调度进入资源调度页面。
![](https://qcloudimg.tencent-cloud.cn/image/document/f32990e6fdc45414be2bef5cea7deda3.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/f32990e6fdc45414be2bef5cea7deda3.png)
3. 单击资源调度器开关,打开开关后即可进行相关调度器配置。
4. 新建 Capacity Scheduler
调度策略类型选择 Capacity Scheduler 即可进入 Capacity Scheduler 的配置页面,单击新增资源池即可新建资源池。可对已有资源池进行编辑、新建子池、克隆等操作;也可单击默认设置进行设置容量调度的延迟调度次数。
![](https://qcloudimg.tencent-cloud.cn/image/document/16b0f098591da392a94e603005e9e7b3.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/16b0f098591da392a94e603005e9e7b3.png)
新建资源池:
![](https://qcloudimg.tencent-cloud.cn/image/document/74ed56f628821a1a37a27948f984f8bb.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/74ed56f628821a1a37a27948f984f8bb.png)
字段与配置项对照表:
字段名称 | 对应参数名称 | 参数含义 |
资源池名称 | yarn.scheduler.capacity.<queue-path>.queues</queue-path> | 资源池的名称或队列的名称。 |
标签设置 | 无 | 设置队列可以访问的特定标签。 |
容量 | yarn.scheduler.capacity.<queue-path>.capacity</queue-path> | 可以使用的资源大小,同一父资源池的子池容量总和为100,能使用的资源=父资源池*容量%。如果该队列需要比这个比例更高的资源,而其他队列又有空闲资源的话,可以占用比这个比例更高的资源。 |
最大容量 | yarn.scheduler.capacity.<queue-path>.maximum-capacity</queue-path> | 队列的资源使用上限(百分比)。由于存在资源共享,因此一个队列使用的资源量可能超过其容量,而最多使用资源量可通过该参数限制。 |
默认标签表达式 | yarn.scheduler.capacity.<queue-path>.default-node-label-expression</queue-path> | 当资源请求未指定节点标签时,应用将被提交到该值对应的分区。默认情况下,该值为空,即应用程序将被分配没有标签的节点上的容器。 |
用户最小容量 | yarn.scheduler.capacity.<queue-path>.minimum-user-limit-percent</queue-path> | 每个用户最低资源保障(百分比)。任何时刻,一个队列中每个用户可使用的资源量均有一定的限制。当一个队列中同时运行多个用户的应用程序时,每个用户的使用资源量在一个最小值和最大值之间浮动,其中,最小值取决于正在运行的应用程序数目,而最大值则由 minimum-user-limit-percent 决定。 |
用户资源因子 | yarn.scheduler.capacity.<queue-path>.user-limit-factor</queue-path> | 每个用户最多可使用的资源量(百分比)。例如,假设该值为30,则任何时刻,每个用户使用的资源量不能超过该队列容量的30%。 |
分配 Container 最大内存数量 | yarn.scheduler.capacity.<queue-path>.maximum-allocation-mb</queue-path> | 每个 container 的最大内存值,这个配置会覆盖 yarn.scheduler.maximum-allocation-mb 值,但是该值必须小于等于系统的 yarn.scheduler.maximum-allocation-mb 的值。 |
Container 最大 vCore 数量 | yarn.scheduler.capacity.<queue-path>.maximum-allocation-vcores</queue-path> | 每个 container 的最大核数,这个配置会覆盖 yarn.scheduler.maximum-allocation-vcores 值,但是该值必须小于等于系统的 yarn.scheduler.maximum-allocation-vcores 的值。 |
资源池状态 | yarn.scheduler.capacity.<queue-path>.state</queue-path> | 队列的状态。可以是正在运行或已停止。如果队列处于停止状态,则无法向其自身或其任何子队列提交新的应用程序。 |
最大应用数 Max-Applications | yarn.scheduler.capacity.<queue-path>.maximum-applications</queue-path> | 系统中可同时处于活动状态(正在运行和挂起)的最大应用程序数。 |
最大 AM 比例 | yarn.scheduler.capacity.<queue-path>.maximum-am-resource-percent</queue-path> | 群集中可用于运行应用程序主机的最大资源百分比-控制并发活动应用程序的数量。 |
资源池优先级 | yarn.scheduler.capacity.root.<leaf-queue-path>.default-application-priority</leaf-queue-path> | 配置资源队列的优先级,默认为0,设置值越大,优先级越高。 |
提交访问控制 | yarn.scheduler.capacity.root.<queue-path>.acl_submit_applications | 可以提交 apps 到队列的用户的列表。 |
管理访问控制 | yarn.scheduler.capacity.root.<queue-path>.acl_administer_queue | 可以管理队列的用户的列表。 |
node-locality-delay | yarn.scheduler.capacity.node-locality-delay | 保证任务本地化执行,可以延迟调度的次数。如果值为 -1,将禁用延迟调度。 |
multiple-assignments-enabled | yarn.scheduler.capacity.per-node-heartbeat.multiple-assignments-enabled | 是否允许在一次 NodeManager 心跳中分配多个容器。默认为 true。仅支持 Hadoop3.x 版本。 |
maximum-container-assignments | yarn.scheduler.capacity.per-node-heartbeat.maximum-container-assignments | 如果 multiple-assignments-enabled 为 true,在一次 NodeManager 心跳中可以分配的最大容器数量。如果值为-1,将禁用该参数。仅支持 Hadoop3.x 版本。 |
resource-calculator | yarn.scheduler.capacity.resource-calculator | 用于比较调度程序中的资源的 ResourceCalculator 实现。可输入 org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator 或
org.apache.hadoop.yarn.util.resource.DominantResourceCalculator。DefaultResourceCalculator 为默认值,只使用内存;而 DominantResourceCalculator 使用多维资源,如内存、CPU 等。 |
配置资源池映射
1. 单击策略设置中的资源池映射即可进入资源池映射页面,单击新建资源池映射即可进行新建资源池映射。
![](https://qcloudimg.tencent-cloud.cn/image/document/dcf39ef2f21d97939e25314b2844d1aa.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/dcf39ef2f21d97939e25314b2844d1aa.png)
新建资源池映射:
![](https://qcloudimg.tencent-cloud.cn/image/document/7b4e79445f798d3004ddf61c18a85904.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/7b4e79445f798d3004ddf61c18a85904.png)
2. 是否覆盖用户指定队列
默认关闭,假如用户在资源池映射中定义了映射的队列,且用户在提交任务时指定了队列,但是该队列与映射队列不同时:当用户指定的队列为 default 或者开启了覆盖,则会使用映射队列,否则使用用户指定的队列。
示例标签调度
1. 登录 EMR 控制台,在集群列表中选择对应的 Hadoop 集群单击详情进入集群详情页。
2. 在集群详情页中选择集群服务 > Yarn 组件卡页右上角操作 > 资源调度进入资源调度页面。
3. 单击资源调度器开关,调度器类型选择 Capacity Scheduler。
4. 单击标签调度开关,打开标签调度后单击标签管理,进入标签管理页。
![](https://qcloudimg.tencent-cloud.cn/image/document/f358e00c77452bbf4678f75525b65210.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/f358e00c77452bbf4678f75525b65210.png)
5. 单击新建标签,填写标签名称,并根据需要设置标签类型和该标签绑定的节点。
![](https://qcloudimg.tencent-cloud.cn/image/document/0c47219bd7869f6c0c7f714d89946177.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/0c47219bd7869f6c0c7f714d89946177.png)
6. 标签设置完成后,单击指令生效,即可在资源池中编辑查看该标签的资源队列。
![](https://qcloudimg.tencent-cloud.cn/image/document/8df67e3b38ef3e2e2eaeef4e5c9202a7.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/8df67e3b38ef3e2e2eaeef4e5c9202a7.png)
7. 在资源调度页中单击新建资源池,根据业务需要选择标签、容量、最大容量等。
说明
资源池在不同标签中的容量、最大容量相互独立,即可以按照业务分别进行配置,相互不影响。
![](https://qcloudimg.tencent-cloud.cn/image/document/0c4ed3cad64a084ba3794ba9a7f6951b.png)
8. 资源池设置完后,单击部署生效,即向后台提交了部署生效任务。
注意
由于 ResourceManager 重启属于高危操作,单击部署生效时如果提示会重启 ResourceManager,请在调度历史中查看操作是否成功,并在角色管理中查看 ResourceManager 健康状态是否良好。