背景
在我们实际的部署环境中,经常会出现不同的机器类型,比如部分节点是计算型,部分节点是内存型;不同阶段采购设备配置也可能存在较大差异;大型集群开通多租户情况下,需要保障特定租户的稳定性及优先级,避免其他用户的任务对其造成影响;
node label
节点标签就是此类问题的一种解决方案;运维人员可以根据节点的特性将其划分到不同的分区来满足多维度的使用需求。
特性
- 一个
Node Manager
节点只能属于一个label
,如果节点没有配置label
,则其属于一个不存在的DEFAULT
分区; label
有两种模式:exclusive
和non-exclusive
:non-exclusive
:该模式下节点同时归属于DEFAULT
分区,当用户申请DEFAULT
分区的资源时,可同时使用non-exclusive
的资源;
- 用户可以为每个队列配置可访问的分区,默认只可以访问
DEFAULT
分区; - 可以配置每个队列可访问特定分区的资源比例;
- 支持配置动态变更及动态生效;
常用命令
- 查询
label
:yarn cluster -lnl
- 添加
label
:yarn rmadmin -addToClusterNodeLabels [label1,label2]
- 删除
label
:yarn rmadmin -removeFromClusterNodeClusters [label1,label2]
- 为节点配置
label
:yarn rmadmin -replaceLabelsOnNode [node1:port = laebel1,label2]
- 查询节点:
yarn node -list -all
- 查询节点状态:
yarn node -state <nodeId>
参数配置
默认情况下,集群是未开启node label
标签功能的,如需启用,需调整yarn-site.xml
参数:
<property>
<name>yarn.node-labels.fs-store.root-dir</name>
<value>hdfs://namenode:port/path/to/store/node-labels/</value>
</property>
<property>
<name>yarn.node-labels.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>
Node Label
需与CapacityScheduler
调度策略配合使用,配置样例如下:
<!--capacity-scheduler.xml-->
<configuration>
<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>poc,demo</value>
<description>设置二级子队列 </description>
</property>
<property>
<name>yarn.scheduler.capacity.root.capacity</name>
<value>100</value>
<description>定义root队列默认分区容量为100%</description>
</property>
<property>
<name>yarn.scheduler.capacity.root.maximum-capacity</name>
<value>100</value>
<description>定义root队列默认分区的资源最大容量为100%</description>
</property>
<property>
<name>yarn.scheduler.capacity.root.accessible-node-labels</name>
<value>*</value>
<description>定义root队列可以访问的标签为所有分区,如果为空则只能访问默认分区DEFAULT</description>
</property>
<property>
<name>yarn.scheduler.capacity.root.accessible-node-labels.CPU.capacity</name>
<value>100</value>
<description>定义root队列可以访问的CPU分区容量</description>
</property>
<property>
<name>yarn.scheduler.capacity.root.accessible-node-labels.GPU.capacity</name>
<value>100</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.poc.capacity</name>
<value>40</value>
<description>定义poc队列使用默认分区的容量大小</description>
</property>
<proerpty>
<name>yarn.scheduler.capacity.root.poc.maximum-capacity</name>
<value>80</value>
<description>定义poc队列可使用默认分区的最大容量为100%</description>
</proerpty>
</configuration>