干货分享|使用Yarn标签机制实现任务资源隔离

在 Hadoop YARN 中,标签(Labels)机制是一种资源管理的特性,它允许你对节点和应用程序进行分类,可以有效地进行资源管理和调度。

  • 节点标签(Node Labels):YARN 允许你为集群中的节点定义标签。这些标签可以代表节点的特性,例如硬件配置、操作系统类型等。这使得你可以根据节点的特性将其分为不同的组,以更灵活地管理和调度资源。
  • 应用程序标签(Application Labels):除了节点标签,YARN 还支持将标签分配给特定的应用程序。这使得你可以为不同的应用程序定义特定的运行环境或资源要求

接下来,本文会分别从节点标签和应用标签两个方面来演示YARN标签

01: 启用Yarn标签功能

<property>
  <name>yarn.node-labels.enabled</name>
  <value>true</value>
</property>
<property>
  <name>yarn.node-labels.fs-store.root-dir</name>
  <value>hdfs://hdfs-ha/user/yarn/node-labels</value>
</property>

配置项:

  • yarn.node-labels.enabled 表示是否启用标签功能
  • yarn.node-labels.fs-store.root-dir表示标签的存储位置 ( 可以是本地文件,也可以是hdfs上的存储路径 )

02: Yarn集群中添加标签

使用命令方式给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
  • exclusive表示是否独占,当该标签分区下的节点有空闲资源时,是否可以共享给default分区的任务使用。
  • true表示独占,即不共享,资源仅分配给具有该标签的任务使用。
  • false表示非独占,即可以共享资源给default标签使用。

执行完addToClusterNodeLabels命令之后,查看yarn界面多了两个标签,但是6个节点的资源还在default标签:

03: Namenode节点关联标签

  1. 使用命令方式节点关联标签:
# 用法示例
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保持一致,否则关联无效
  1. 使用配置方式节点关联标签:

在yarn-site.xml中配置对应NodeManager所属标签

<property>
  <name>yarn.node-labels.configuration-type</name>
  <value>distributed</value>
</property>

<property>
  <name>yarn.nodemanager.node-labels.provider</name>
  <value>config</value>
</property>

<property>
  <name>yarn.nodemanager.node-labels.provider.configured-node-partition</name>
  <value>az1</value>
</property>

在不同NodeManager所属的标签在yarn.nodemanager.node-labels.provider.configured-node-partition配置对应标签名

经过上面配置之后 yarn UI 界面Node_Lables会显示我们刚才所设置的标签名称:

04: 配置队列可访问的标签和容量

配置队列可访问的标签和容量

<!-- default队列 -->
 <property>
    <name>yarn.scheduler.capacity.root.default.accessible-node-labels</name>
    <value>az1,az2</value>
    <description>default队列应用可用的节点标签</description>
</property>:q:q
<property>
    <name>yarn.scheduler.capacity.root.default.default-node-label-expression</name>
    <value>az1</value>
    <description>default队列应用默认节点标签</description>
</property>

<property>
    <name>yarn.scheduler.capacity.root.default.accessible-node-labels.az1.capacity</name>
    <value>100</value>
    <description>default队列对az1标签节点可用的百分比</description>
</property>
<property>
    <name>yarn.scheduler.capacity.root.default.accessible-node-labels.az1.maximum-capacity</name>
    <value>100</value>
    <description>default队列对az1标签节点最大的百分比</description>
</property>

<property>
    <name>yarn.scheduler.capacity.root.default.accessible-node-labels.az2.capacity</name>
    <value>100</value>
    <description>default队列对az2标签节点可用的百分比</description>
</property>
<property>
    <name>yarn.scheduler.capacity.root.default.accessible-node-labels.az2.maximum-capacity</name>
    <value>100</value>
    <description>default队列对az2标签节点最大的百分比</description>
</property>

<!-- root 队列 -->
<property>
  <name>yarn.scheduler.capacity.root.accessible-node-labels.az1.capacity</name>
  <value>100</value>
  <description>root队列对az1标签节点最大的可用百分比</description>
</property>
<property>
  <name>yarn.scheduler.capacity.root.accessible-node-labels.az2.capacity</name>
  <value>100</value>
  <description>root队列对az2标签节点最大的可用百分比</description>
</property>

配置完成后刷新队列:yarn rmadmin -refreshQueues

查看队列Scheduler修改为partition分组:

05: 任务提交到Yarn指定的标签

提交MR任务指定标签:

-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

Yarn任务:

-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

Hive任务:

set mapreduce.job.node-label-expression=default;
set mapreduce.job.queuename=az1;

Spark任务:

--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

Flink任务:

-ynl,--yarnnodeLabel <arg> :Specify YARN node label for the YARN application-yqu,--yarnqueue <arg> :Specify YARN queue../bin/flink run -m yarn-cluster -yjm 1024 -ytm 1024 -ynl az1 -yqu default ./examples/batch/WordCount.jar

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值