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

 也可以观看大数据相关视频:

千锋大数据Hadoop全新增强版-先导片

猜你喜欢

转载自blog.csdn.net/longz_org_cn/article/details/131004778