Yarn标签调度--HDP测试

hadoop版本从2.7.2版本开始 新增标签调度功能。

标签调度功能:可以给节点设置标签 让作业任务调度到这个设置的标签节点。

列入:

某个任务需要用到gpu资源,而gpu并非在每个节点上都有,通过对节点设置标签,可以使作业任务正确调度到含gpu资源的节点上,确保作业任务正确运行。

接下来我们开始配置这一个功能

首先我们采用的环境版本—我这边采用HDP集群 当然开源方案一样可以参考

组件

版本

JDK

1.8.0_281

Hadoop

3.1.1.3.1

【开始配置】

首先我们启动标签功能

在yarn-site中加入如下参数:
<property>
  <name>yarn.node-labels.enabled</name>
  <value>true</value>
</property>
<property>
  <name>yarn.node-labels.fs-store.root-dir</name>
  <value>hdfs://migratecluster/yarn/node-labels</value>
</property>
注意其中migratecluster需要换成自己的nameservices具体参数可以在hdfs-site、core-site配置文件中查找dfs.internal.nameservices
还需要注意我这边使用的是hdp默认的这个hdfs目录
yarn.node-labels.fs-store.root-dir=/system/yarn/node-labels
解释:
配置项yarn.node-labels.enabled表示是否启用标签功能。
yarn.node-labels.fs-store.root-dir表示标签的存储位置,可以是本地文件,也可以是hdfs上的存储路径(文件目录会自动进行创建)
对于HDP集群来讲已经有这个按钮直接enable开启即可~
十分方便
保存重启yarn服务
重启完成后
就该在集群中添加标签了
添加标签可以直接使用yarn命令 添加一个gpu标签— 这步需要yarn用户执行
yarn rmadmin -addToClusterNodeLabels "gpu(exclusive=true)"
exclusive表示是否独占,具体可以理解为,当该标签分区下的节点有空闲资源时,是否可以共享给default分区的任务使用。
true表示独占,即不共享,资源仅分配给具有该标签的任务使用。
false表示非独占,即可以共享。
添加标签前,rm的界面上,可以看到只有DEFAULT标签(如下图所示)
从上图可以看出来,gpu这个标签对应的分区中都还没有活跃的NM节点。
NM节点关联标签
完成标签的添加后,接下来就是给指定的节点关联到不同的标签上,也就是将集群的节点按标签划分成不同的节点分区。
yarn rmadmin -replaceLabelsOnNode "172.16.121.249:8042=gpu"
执行上面的命令后,再来看看rm的界面,可以看到gpu的标签,有了一个活跃的节点,而DEFAULT标签中则少了一个活跃节点。
从NM节点列表的界面中,也可以看到该节点有了对应的标签信息。
同时,队列的界面中,也多出了对应的标签信息,所有队列均会出现在所有标签中。
但是gpu标签下还未设置对应标签的使用容量。
设置队列可访问的标签与容量
注意:HDP的Yarn Queue Manager界面—也可以 推荐用HDP Yarn Manager添加
推荐Yarn Queue Manager添加方法
一共注意下面3个框框中的东西 一个是启动标签队列 选择标签队列 还有就是默认提交这个队列为标签队列
保存后会自动刷新

配置修改方法: 不推荐手动添加的方法
搜索配置:capacity-scheduler.xml
加入如下配置
<!-- default队列 -->
<property>
<name>yarn.scheduler.capacity.root.default.accessible-node-labels</name>
<value>gpu</value>
<description>default队列应用可用的节点标签</description>
</property>:q:q
<property>
<name>yarn.scheduler.capacity.root.default.default-node-label-expression</name>
<value>gpu</value>
<description>default队列应用默认节点标签</description>
</property>
<property>
<name>yarn.scheduler.capacity.root.default.accessible-node-labels.gpu.capacity</name>
<value>100</value>
<description>default队列对gpu标签节点可用的百分比</description>
</property>
<property>
<name>yarn.scheduler.capacity.root.default.accessible-node-labels.gpu.maximum-capacity</name>
<value>100</value>
<description>default队列对gpu标签节点最大的百分比</description>
</property>
<!-- root 队列 -->
<property>
<name>yarn.scheduler.capacity.root.accessible-node-labels.gpu.capacity</name>
<value>100</value>
<description>root队列对gpu标签节点最大的可用百分比</description>
</property>
HDP参数如下:
yarn.scheduler.capacity.root.default.accessible-node-labels=gpu
yarn.scheduler.capacity.root.default.default-node-label-expression=gpu
yarn.scheduler.capacity.root.default.accessible-node-labels.gpu.capacity=100
yarn.scheduler.capacity.root.default.accessible-node-labels.gpu.maximum-capacity=100
yarn.scheduler.capacity.root.accessible-node-labels.gpu.capacity=100
参数含义:
1. yarn.scheduler.capacity.root.default.accessible-node-labels=gpu
    * 含义: 设置 default 队列可以访问的节点标签为 "gpu"。
2. yarn.scheduler.capacity.root.default.default-node-label-expression=gpu
    * 含义: 设置 default 队列应用的默认节点标签为 "gpu"。
3. yarn.scheduler.capacity.root.default.accessible-node-labels.gpu.capacity=100
    * 含义: 设置 default 队列可访问 "gpu" 标签节点的容量百分比为 100%。
4. yarn.scheduler.capacity.root.default.accessible-node-labels.gpu.maximum-capacity=100
    * 含义: 设置 default 队列对 "gpu" 标签节点的最大可用容量百分比为 100%。
5. yarn.scheduler.capacity.root.accessible-node-labels.gpu.capacity=100
    * 含义: 设置 root 队列可访问 "gpu" 标签节点的容量百分比为 100%。

配置完成后,通过命令刷新队列使配置生效,在界面中可以看到如下信息:
冒烟测试
提交hive任务指定标签
set mapreduce.job.node-label-expression=gpu;
set mapreduce.job.queuename=defalt;
一开始提交不上注意这个参:
将标签与队列映射
yarn.scheduler.capacity..capacity 指定default分区的队列容量
yarn.scheduler.capacity..accessible-node-labels
配置队列可以访问的标签,多个以逗号分隔。
注:没有标签的节点,所有队列均可以访问。如果不指定,则继承父队列的。如果想队列只能访问没有标签的节点,设置此值为空格。
yarn.scheduler.capacity..accessible-node-labels..capacity 配置队列可以访问的分区容量
yarn.scheduler.capacity..accessible-node-labels..maximum-capacity 配置队列可以访问的分区绝对最大容量
yarn.scheduler.capacity..default-node-label-expression 用于配置默认分区 如果提交任务到该队列时没有指定标签,则默认为此值。默认为空,也就是不指定标签将会运行在没有标签的节点。

相关推荐

  1. 总结:HDFS+YARN+HIVE

    2024-07-10 23:10:02       25 阅读
  2. YARN分布式资源调度框架

    2024-07-10 23:10:02       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 23:10:02       3 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 23:10:02       3 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 23:10:02       2 阅读
  4. Python语言-面向对象

    2024-07-10 23:10:02       2 阅读

热门阅读

  1. tcp 中的poll机制介绍

    2024-07-10 23:10:02       9 阅读
  2. python excel openpyxl

    2024-07-10 23:10:02       8 阅读
  3. 生物环保的技术原理和优点是什么

    2024-07-10 23:10:02       11 阅读
  4. 深入理解Spring Cloud中的服务注册

    2024-07-10 23:10:02       8 阅读
  5. SIFT代码,MATLAB

    2024-07-10 23:10:02       9 阅读
  6. Scala 数据类型

    2024-07-10 23:10:02       10 阅读