YARN的Node Label机制
Node Label的介绍
官网对NodeLabel的介绍如下:
Node label is a way to group nodes with similar characteristics and applications can specify where to run.
节点标签是一种对具有相似特征的节点进行分组的方法,应用程序可以指定在哪里运行。
那么标签到底是做什么的?
我们可以创建多个队列,划分集群的总的资源。例如队列hive占集群总资源的70%,那么这个70%具体会落地在哪一个节点上呢?没办法确定,有可能在qianfeng01,也有可能在qianfeng03。而节点标签,可以为每一个NodeManager打上标签,可以限定某一个程序只能够运行在哪些节点上。例如我希望我的wordcount的程序只会运行在qianfeng02和qianfeng03节点上,这就是标签的作用。
开启标签
修改 yarn-site.xml 文件,添加如下配置:
<!-- 启用节点标签 -->
<property>
<name>yarn.node-labels.enabled</name>
<value>true</value>
</property>
<!-- 节点标签存储的路径,可以是HDFS,也可以是本地文件系统 -->
<!-- 如果是本地文件系统,使用类似file:///home/yarn/node-label这样的路径 -->
<!-- 无论是HDFS,还是本地文件系统,需要保证RM有权限去访问 -->
<property>
<name>yarn.node-labels.fs-store.root-dir</name>
<value>hdfs://qianfeng01:9820/tmp/yarn/node-labels/</value>
</property>
<!-- 保持默认即可,也可以不配置这个选项 -->
<property>
<name>yarn.node-labels.configuration-type</name>
<value>centralized</value>
</property>
分发到每一个节点,重启YARN即可。
标签管理
添加标签
yarn rmadmin -addToClusterNodeLabels "label_1"
yarn rmadmin -addToClusterNodeLabels "label_2,label_3"
查看标签
yarn cluster --list-node-labels
删除标签
yarn rmadmin -removeFromClusterNodeLabels label_1
为节点打上标签
# 绑定一个NodeManager与Label
yarn rmadmin -replaceLabelsOnNode "qianfeng02=label_2"
# 绑定多个NodeManager与Label的关系,中间用空格分隔
yarn rmadmin -replaceLabelsOnNode "qianfeng02=label_2 qianfeng03=label_2"
# 一个标签可以绑定多个NodeManager,一个NodeManager只能绑定一个标签。
# 例如上方的,label_2就绑定在了qianfeng02和qianfeng03的NodeManager上。
# 绑定完成后,可以使用WebUI进行查看。
# 在WebUI的左侧,有Node Labels的查看,可以查看到所有的标签,以及对应的节点信息。
# 需要注意的是,如果某节点没有进行标签的绑定,则其在一个默认的<DEFAULT_PARTITION>上绑定。
为队列绑定标签
通过修改capacity-scheduler.xml实现:
<!-- 前文,我们已经新增了一个队列,现在共有两个队列: default、small -->
<!-- 设置某个队列可以使用的标签,*表示通配,可以使用所有标签 -->
<property>
<name>yarn.scheduler.capacity.root.default.accessible-node-labels</name>
<value>*</value>
</property>
<!-- 设置small队列可以使用label_3标签的节点资源 -->
<property>
<name>yarn.scheduler.capacity.root.small.accessible-node-labels</name>
<value>label_3</value>
</property>
<!-- 设置default队列可以使用label_2标签的节点资源最多60% -->
<property>
<name>yarn.scheduler.capacity.root.default.accessible-node-labels.label_2.capacity</name>
<value>60</value>
</property>
<!-- 设置small队列可以使用label_3标签的节点资源最多80% -->
<property>
<name>yarn.scheduler.capacity.root.small.accessible-node-labels.label_3.capacity</name>
<value>80</value>
</property>
<!-- 设置default队列,如果没有明确的标签指向,则默认使用label_3 -->
<property>
<name>yarn.scheduler.capacity.root.default.default-node-label-expression</name>
<value>label_3</value>
</property>
修改之后,无需重启,直接刷新一下队列即可: yarn rmadmin -refreshQueues
测试
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar pi -Dmapreduce.job.queuename=small 10 10
更多大数据精彩内容欢迎B站搜索“千锋教育”或者扫码领取全套资料
【千锋教育】大数据开发全套教程,史上最全面的大数据学习视频文章来源:https://www.toymoban.com/news/detail-542818.html
文章来源地址https://www.toymoban.com/news/detail-542818.html
到了这里,关于YARN的Node Label机制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!