YARN Node Lable配置

标签是做什么的?

原汁原味的话,看官网Apache Hadoop-3.1.2

来一个对比,多队列和打标签的区别:

1. 多队列,是将集群汇总的资源按配比划分成多个队列,每个队列的资源对于机器来讲,都是不确定的,比如ABC三个队列每人占总集群资源的30%,A队列的30%是总数的百分比,落实到资源上是不确定哪台机器的,可能是1,2,3号机器,也可能是5,6,7号机器,重点是不确定性

2. 打标签,是按节点打标签的,主要是区分机器作用,比如A程序只能在1,2,3机器上运行,但是MapReduce调度(调度的问题后面写)是不确定机器的,为了实现"只要A程序运行就分发到1,2,3上去运行,不去其他机器上执行",这是打标签的作用

这篇主要写打标签


 

配置yarn-site.xml

  <property>
    <name>yarn.node-labels.fs-store.root-dir</name>
    <value>hdfs://namenode:port/path/to/store/node-labels/</value>
<!--也可以是本地文件系统file://home/path/to/store/node-labels/-->
</property> <property> <name>yarn.node-labels.configuration-type</name> <value>centralized</value>
<!--一共有三种,centralized,delegated-centralized,distributed,区别有空再写-->
</property> <property> <name>yarn.node-labels.enabled</name> <value>true</value> </property>

添加标签 lable_1 到YARN集群的known lables collection

hadoop@hadoop2:/opt/hadoop-3.1.2/etc/hadoop$ yarn rmadmin -addToClusterNodeLabels "lable_1(exclusive=true)"   #双引号里面可以不写()的内容,exclustive默认是true,也就是默认独占整台节点
2020-09-11 16:05:36,290 INFO client.RMProxy: Connecting to ResourceManager at hadoop2/192.168.6.22:8033
hadoop@hadoop2:/opt/hadoop-3.1.2/etc/hadoop$

查看集群已有的标签集合

hadoop@hadoop2:/opt/hadoop-3.1.2/etc/hadoop$ yarn cluster --list-node-labels
2020-09-11 16:09:18,960 INFO client.RMProxy: Connecting to ResourceManager at hadoop2/192.168.6.22:8032
Node Labels: <lable_1:exclusivity=true>,<z:exclusivity=true>
hadoop@hadoop2:/opt/hadoop-3.1.2/etc/hadoop$ 

删除集群标签集合里的标签

hadoop@hadoop2:/opt/hadoop-3.1.2/etc/hadoop$ yarn rmadmin -removeFromClusterNodeLabels lable_1
2020-09-11 16:11:39,552 INFO client.RMProxy: Connecting to ResourceManager at hadoop2/192.168.6.22:8033
hadoop@hadoop2:/opt/hadoop-3.1.2/etc/hadoop$ 

将集合内的标签添加到机器上

hadoop@hadoop2:/opt/hadoop-3.1.2/etc/hadoop$ yarn rmadmin -replaceLabelsOnNode "hadoop2=lable_1"       #hadoop2 这里默认是hadoop2这台机器上的所有nodemanager,如果要特指,用hostname:port即可,port为YARN UI上的Node Address
2020-09-11 16:10:05,841 INFO client.RMProxy: Connecting to ResourceManager at hadoop2/192.168.6.22:8033
hadoop@hadoop2:/opt/hadoop-3.1.2/etc/hadoop$ 

为调度器添加标签,也就是将标签添加至队列

这里要解释一下,为什么要添加到队列,相当于队列()的标签和节点的标签是一种绑定关系,队列配置标签之后,相同标签的节点才会确切的归属这个队列,独占与否看上述标签的配置是否设置为true

引用官网的栗子

              root
          /    |     \
 engineer   sales  marketing

5个节点,h1~h5,其中一台有GPU(暂定为h5有GPU),将GPU Lable添加至h5节点(下面的队列的配置最后是要用xml的格式去添加进配置文件的)

yarn.scheduler.capacity.root.queues=engineering,marketing,sales    #配置三个队列
yarn.scheduler.capacity.root.engineering.capacity=33     \
yarn.scheduler.capacity.root.marketing.capacity=34        |   三个队列资源之和必须等于100
yarn.scheduler.capacity.root.sales.capacity=33           /

yarn.scheduler.capacity.root.engineering.accessible-node-labels=GPU  #允许engineering队列使用GPU标签的机器
yarn.scheduler.capacity.root.marketing.accessible-node-labels=GPU    #允许marketing队列使用GPU标签的机器

yarn.scheduler.capacity.root.engineering.accessible-node-labels.GPU.capacity=50   #允许engineering队列使用GPU标签的资源最多50%
yarn.scheduler.capacity.root.marketing.accessible-node-labels.GPU.capacity=50     #允许marketing队列使用GPU标签的资源最多50%

yarn.scheduler.capacity.root.engineering.default-node-label-expression=GPU       #如果engineering队列的任务没有指向特定的标签,那默认就使用GPU标签的资源

这些配置一定要仔细,建议用sublime或者nodepad++这种有色文本编辑器编辑,如果多个队列的配置,那这些配置的数量会很多,建议草稿打好,配置完成再写配置文件

配置完之后刷新队列即可

 yarn rmadmin -refreshQueues

刷新完成之后即可将GPU标签添加到具体的节点上,添加命令还用之前的即可,添加完成之后即可看到YARN的Web页面上的

 

 

 此时,标签已经绑定至队列,所以标签是不能删除的


 

下面是我自己测试的集群的配置和效果供参考

 

 

  <property>
    <name>yarn.scheduler.capacity.root.small.accessible-node-labels</name>
    <value>lable_1</value>
  </property>

  <property>
    <name>yarn.scheduler.capacity.root.big.accessible-node-labels</name>
    <value>lable_1</value>
  </property>

  <property>
    <name>yarn.scheduler.capacity.root.small.accessible-node-labels.lable_1.capacity</name>
    <value>50</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.big.accessible-node-labels.lable_1.capacity</name>
    <value>50</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.big.default-node-label-expression</name>
    <value>lable_1</value>
  </property>
capacity-scheduler.xml
<configuration>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop2</value>
  </property>
  <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
  </property>
  <property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>106800</value>
  </property>
  <property>
    <name>yarn.node-labels.enabled</name>
    <value>true</value>
  </property>
  <property>
    <name>yarn.node-labels.fs-store.root-dir</name>
    <value>hdfs://zhangwentao/lable</value>
  </property>
  <property>
    <name>yarn.node-labels.configuration-type</name>
    <value>centralized</value>
  </property>
</configuration>
yarn-site.xml

节点效果

 

 

 

队列效果

 

 

posted @ 2020-09-11 16:44  wen1995  阅读(829)  评论(0编辑  收藏  举报