YARN启用Node Labels标签调度策略

  |   0 评论   |   4,575 浏览

使ResourceManager启用Node Labels功能

创建HDFS目录,用于存放标签

[hadoop@nn1 hadoop]$ hadoop fs -mkdir -p /system/yarn/node-labels

修改yarn-site.xml,启用Node Labels功能

<property>
    <name>yarn.node-labels.enabled</name>
    <value>true</value>
</property>
<property>
    <name>yarn.node-labels.fs-store.root-dir</name>
    <value>hdfs://ns1/system/yarn/node-labels</value></property>
<property>
    <name>yarn.node-labels.manager-class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.nodelabels.RMNodeLabelsManager</value>
</property>
  • 需要重启ResourceManager

打标签

创建标签列表

yarn rmadmin -addToClusterNodeLabels normal,cpu

给节点打标签

yarn rmadmin -replaceLabelsOnNode s1.cxy7.com,normal
yarn rmadmin -replaceLabelsOnNode s2.cxy7.com,normal
yarn rmadmin -replaceLabelsOnNode s3.cxy7.com,normal
yarn rmadmin -replaceLabelsOnNode s4.cxy7.com,cpu
yarn rmadmin -replaceLabelsOnNode s5.cxy7.com,cpu
yarn rmadmin -replaceLabelsOnNode s6.cxy7.com,cpu

查看HDFS上的标签文件

[hadoop@nn1 ~]$ hadoop fs -ls /system/yarn/node-labels
Found 2 items
-rw-r-----   3 hadoop hadoop         47 2017-05-24 16:11 /system/yarn/node-labels/nodelabel.editlog
-rw-r-----   3 hadoop hadoop          2 2017-05-24 16:10 /system/yarn/node-labels/nodelabel.mirror

添加队列与标签的匹配关系

修改capacity-scheduler.xml

<?xml version="1.0" encoding="utf-8"?>

<configuration>
  <property> 
    <name>yarn.scheduler.capacity.root.queues</name>  
    <value>dev,product</value>
  </property>
  <!-- 配置各队列可使用的集群总资源占比 -->
  <property> 
    <name>yarn.scheduler.capacity.root.dev.capacity</name>  
    <value>40</value>  
    <description>default queue target capacity.</description>
  </property>
  <property> 
    <name>yarn.scheduler.capacity.root.product.capacity</name>  
    <value>60</value>  
    <description>default queue target capacity.</description>
  </property>
  <!-- 配置root队列可使用的标签资源占比 -->
  <property> 
    <name>yarn.scheduler.capacity.root.accessible-node-labels.cpu.capacity</name>  
    <value>100</value>
  </property>
  <property> 
    <name>yarn.scheduler.capacity.root.accessible-node-labels.normal.capacity</name>  
    <value>100</value>
  </property>
  <!-- 配置dev和product队列可使用的标签资源占比 -->
  <property> 
    <name>yarn.scheduler.capacity.root.dev.accessible-node-labels.normal.capacity</name>  
    <value>100</value>
  </property>
  <property> 
    <name>yarn.scheduler.capacity.root.product.accessible-node-labels.cpu.capacity</name>  
    <value>100</value>
  </property>
  <!-- 配置root队列可使用的标签 -->
  <property> 
    <name>yarn.scheduler.capacity.root.accessible-node-labels</name>  
    <value>*</value>
  </property>
  <!-- 配置dev队列可使用的标签 -->
  <property> 
    <name>yarn.scheduler.capacity.root.dev.accessible-node-labels</name>  
    <value>normal</value>
  </property>
  <property> 
    <name>yarn.scheduler.capacity.root.dev.default-node-label-expression</name>  
    <value>normal</value>
  </property>
  <!-- 配置product队列可使用的标签 -->
  <property> 
    <name>yarn.scheduler.capacity.root.product.accessible-node-labels</name>  
    <value>cpu</value>
  </property>
  <property> 
    <name>yarn.scheduler.capacity.root.product.default-node-label-expression</name>  
    <value>cpu</value>
  </property>
</configuration>

刷新队列,生效

yarn rmadmin -refreshQueues

查看效果

scheduler.png

其他

从集群中删除标签

yarn rmadmin -removeFromClusterNodeLabels "normal"

从节点中删除标签


yarn rmadmin -replaceLabelsOnNode s1.cxy7.com
yarn rmadmin -replaceLabelsOnNode s2.cxy7.com
yarn rmadmin -replaceLabelsOnNode s3.cxy7.com
yarn rmadmin -replaceLabelsOnNode s4.cxy7.com
yarn rmadmin -replaceLabelsOnNode s5.cxy7.com
yarn rmadmin -replaceLabelsOnNode s6.cxy7.com

报错

removeFromClusterNodeLabels: java.io.IOException: Cannot remove label=normal, because queue=uat is using this label. Please remove label on queue before remove the label
  • 需要先把队列里的标签配置信息去掉


读后有收获可以支付宝请作者喝咖啡