1. Yarn Label
标签创建
当重启ResourceManager
时,可以保证Yarn Label
标签在服务重启之后依然可用,需要在HDFS
上指定 Yarn Label的存储路径,具体操作如下:
- 在
HDFS
上创建目录,用于存放Yarn Label
标签数据(注意创建的目录Yarn
要可以访问),如下命令可能会被使用到
hdfs dfs -mkdir -p /yarn/node-labels
hdfs dfs -chown -R yarn:yarn /yarn/node-labels
hdfs dfs -chmod -R 700 /yarn/node-labels
- 启动集群标签功能
<property>
<name>yarn.node-labels.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.node-labels.fs-store.root-dir</name>
<value>hdfs://<host>:<port>/<absolute_path_to_node_label_directory></value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>
重启
ResourceManager
配置生效
yarn-daemon.sh stop resourcemanager
yarn-daemon.sh start resourcemanager
- 为
yarn
创建集群标签
yarn rmadmin -addToClusterNodeLabels "<label1>(exclusive=<true|false>),<label2>(exclusive=<true|false>)"
注:
exclusive
并不是必须的参数,默认值为true
4. 删除集群标签
yarn rmadmin -removeFromClusterNodeLabels "<label1>,<label2>"
注:如果某个Label已经关联Queue,那么你无法从集群中将其移除
2. 为集群节点创建Label标签
- 为节点关联标签
yarn rmadmin -replaceLabelsOnNode "<node1>:<port>=<label1> <node2>:<port>=<label2>"
注:这里用于关联的集群标签必须是之前定义好的,这一步是将集群标签与节点关联(为节点打标签)
2. 删除节点标签 (将节点的标签置为空)
yarn rmadmin -replaceLabelsOnNode "<node_name>"
3. 创建Queue并关联标签
<configuration>
<!-- 定义了root下有三个队列root.pro root.dev root.def -->
<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>pro,dev,def</value>
</property>
<!-- 定义了root队列默认分区的资源容量为100% -->
<property>
<name>yarn.scheduler.capacity.root.capacity</name>
<value>100</value>
</property>
<!-- 定义root队列的默认分区的资源最大容量为100% -->
<property>
<name>yarn.scheduler.capacity.root.maximum-capacity</name>
<value>100</value>
</property>
<!-- 定义了root队列可以访问的标签为所有分区,如果为空则表示只能访问默认分区 -->
<property>
<name>yarn.scheduler.capacity.root.accessible-node-labels</name>
<value>*</value>
</property>
<!-- 定义了root队列可以访问的cpu分区的容量 -->
<property>
<name>yarn.scheduler.capacity.root.accessible-node-labels.cpu.capacity</name>
<value>100</value>
</property>
<!-- 定义了root队列可以访问的cpu分区的最大容量 -->
<property>
<name>yarn.scheduler.capacity.root.accessible-node-labels.cpu.maximum-capacity</name>
<value>100</value>
</property>
<!-- 定义了root队列可以访问的mem分区的容量 -->
<property>
<name>yarn.scheduler.capacity.root.accessible-node-labels.mem.capacity</name>
<value>100</value>
</property>
<!-- 定义了root队列可以访问的mem分区的最大容量 -->
<property>
<name>yarn.scheduler.capacity.root.accessible-node-labels.mem.maximum-capacity</name>
<value>100</value>
</property>
<!--队列root.pro使用默认分区的容量为40%-->
<property>
<name>yarn.scheduler.capacity.root.pro.capacity</name>
<value>40</value>
</property>
<!-- 队列root.pro使用默认分区的最大容量为100% -->
<property>
<name>yarn.scheduler.capacity.root.pro.maximum-capacity</name>
<value>100</value>
</property>
<!-- 队列root.pro可以访问的分区cpu和mem -->
<property>
<name>yarn.scheduler.capacity.root.pro.accessible-node-labels</name>
<value>cpu,mem</value>
</property>
<!-- 队列root.pro默认访问cpu分区 -->
<property>
<name>yarn.scheduler.capacity.root.pro.default-node-label-expression</name>
<value>cpu</value>
</property>
<!-- 队列root.pro访问cpu分区的容量为100% -->
<property>
<name>yarn.scheduler.capacity.root.pro.accessible-node-labels.cpu.capacity</name>
<value>100</value>
</property>
<!-- 队列root.pro访问cpu分区的最大容量为100% -->
<property>
<name>yarn.scheduler.capacity.root.pro.accessible-node-labels.cpu.maximum-capacity</name>
<value>100</value>
</property>
<!-- 队列root.pro访问50%的mem分区容量 -->
<property>
<name>yarn.scheduler.capacity.root.pro.accessible-node-labels.mem.capacity</name>
<value>50</value>
</property>
<!-- 队列root.pro可以访问100%的mem分区的容量 -->
<property>
<name>yarn.scheduler.capacity.root.pro.accessible-node-labels.mem.maximum-capacity</name>
<value>100</value>
</property>
<!-- 定义root.dev队列访问默认分区的比例为30% -->
<property>
<name>yarn.scheduler.capacity.root.dev.capacity</name>
<value>30</value>
</property>
<!-- 定义root.dev队列访问默认分区的最大比例为100% -->
<property>
<name>yarn.scheduler.capacity.root.dev.maximum-capacity</name>
<value>100</value>
</property>
<!-- 定义root.dev队列访问的分区为mem -->
<property>
<name>yarn.scheduler.capacity.root.dev.accessible-node-labels</name>
<value>mem</value>
</property>
<!-- 定义root.dev队列访问mem分区的容量为50% -->
<property>
<name>yarn.scheduler.capacity.root.dev.accessible-node-labels.mem.capacity</name>
<value>50</value>
</property>
<!-- 定义root.dev队列访问mem分区的最大容量为100%-->
<property>
<name>yarn.scheduler.capacity.root.dev.accessible-node-labels.mem.maximum-capacity</name>
<value>100</value>
</property>
<!-- 定义root.def队列访问默认分区30%的容量 -->
<property>
<name>yarn.scheduler.capacity.root.def.capacity</name>
<value>30</value>
</property>
<!-- 定义root.def队列访问默认分区最大容量为100%-->
<property>
<name>yarn.scheduler.capacity.root.def.maximum-capacity</name>
<value>100</value>
</property>
</configuration>
注:在配置完capacity-scheduler.xml之后,需要刷新下队列,很重要,在删除集群标签时也要修改该配置文件,然后刷新列表
yarn rmadmin -refreshQueues