在 Hadoop YARN 中,标签(Labels)机制是一种资源管理的特性,它允许你对节点和应用程序进行分类,可以有效地进行资源管理和调度。
接下来,本文会分别从节点标签和应用标签两个方面来演示YARN标签
01: 启用Yarn标签功能
yarn.node-labels.enabled
true
yarn.node-labels.fs-store.root-dir
hdfs://hdfs-ha/user/yarn/node-labels
配置项:
02: Yarn集群中添加标签
yarn rmadmin -addToClusterNodeLabels "az1(exclusive=true)"
yarn rmadmin -addToClusterNodeLabels "az2(exclusive=true)"
# 或者一次性添加两个标签
yarn rmadmin -addToClusterNodeLabels "az1(exclusive=true),az2(exclusive=true)"
## 删除已添加的标签
yarn rmadmin -removeFromClusterNodeLabels az1,az2
## 查看yarn集群已添加的标签
yarn cluster --list-node-labels
执行完addToClusterNodeLabels命令之后,查看yarn界面多了两个标签,但是6个节点的资源还在default标签:
03: Namenode节点关联标签
# 用法示例
yarn rmadmin -replaceLabelsOnNode <"node1[:port]=label1,label2 node2[:port]=label1,label2"> [-failOnUnknownNodes]
# 节点关联标签,hostname拼接写法,节点间空格分割
yarn rmadmin -replaceLabelsOnNode "kmr-fcc5432e-gn-5fcec1c1-core-1-1.ksc.com=az1 kmr-fcc5432e-gn-5fcec1c1-core-1-5.ksc.com=az2"
# 注意只能以kmr-xxx.ksc.com的hostname作为关联,
# 和yarn界面的Nodes显示的hostname保持一致,否则关联无效
在yarn-site.xml中配置对应NodeManager所属标签
yarn.node-labels.configuration-type
distributed
yarn.nodemanager.node-labels.provider
config
yarn.nodemanager.node-labels.provider.configured-node-partition
az1
在不同NodeManager所属的标签在yarn.nodemanager.node-labels.provider.configured-node-partition配置对应标签名
经过上面配置之后 yarn UI 界面Node_Lables会显示我们刚才所设置的标签名称:
04: 配置队列可访问的标签和容量
配置队列可访问的标签和容量
yarn.scheduler.capacity.root.default.accessible-node-labels
az1,az2
default队列应用可用的节点标签
:q:q
yarn.scheduler.capacity.root.default.default-node-label-expression
az1
default队列应用默认节点标签
yarn.scheduler.capacity.root.default.accessible-node-labels.az1.capacity
100
default队列对az1标签节点可用的百分比
yarn.scheduler.capacity.root.default.accessible-node-labels.az1.maximum-capacity
100
default队列对az1标签节点最大的百分比
yarn.scheduler.capacity.root.default.accessible-node-labels.az2.capacity
100
default队列对az2标签节点可用的百分比
yarn.scheduler.capacity.root.default.accessible-node-labels.az2.maximum-capacity
100
default队列对az2标签节点最大的百分比
yarn.scheduler.capacity.root.accessible-node-labels.az1.capacity
100
root队列对az1标签节点最大的可用百分比
yarn.scheduler.capacity.root.accessible-node-labels.az2.capacity
100
root队列对az2标签节点最大的可用百分比
配置完成后刷新队列:yarn rmadmin -refreshQueues
查看队列Scheduler修改为partition分组:
05: 任务提交到Yarn指定的标签
-Dmapreduce.job.queueName=default -Dmapreduce.job.node-label-expression=az1
# 例子
hadoop jar /data/hadoop-3.1.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.1.jar pi 100 100 -Dmapreduce.job.queueName=default -Dmapreduce.job.node-label-expression=az1
-queue default -node_label_expression az1
# 例子
hadoop jar /data/hadoop-3.1.1/share/hadoop/yarn/hadoop-yarn-applications-distributedshell-3.1.1.jar -shell_command "sleep 100" -jar /mnt/kmr/hadoop/1/hadoop-3.1.1/share/hadoop/yarn/hadoop-yarn-applications-distributedshell-3.1.1.jar -num_containers 10 -queue default -node_label_expression az1
set mapreduce.job.node-label-expression=default;
set mapreduce.job.queuename=az1;
--conf spark.yarn.am.nodeLabelExpression=az1
--conf spark.yarn.executor.nodeLabelExpression=az1
--queue default
# 例子
./bin/spark-submit --class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
--driver-memory 2g \
--executor-memory 2g \
--conf spark.yarn.am.nodeLabelExpression=az1 \
--conf spark.yarn.executor.nodeLabelExpression=az1 \
--queue default \
jars/spark-examples.jar 10
-ynl,--yarnnodeLabel
for the YARN application-yqu,--yarnqueue