Hadoop 3.1 Capacity Scheduler Node Label 测试

1. 有运行的任务不可以创建子队列

如系统有两个子队列

<property>
  <name>yarn.scheduler.capacity.root.a.queues</name>
  <value>a, b</value>
</property>
<property>
  <name>yarn.scheduler.capacity.root.a.capacity</name>
  <value>1</value>
</property>
<property>
  <name>yarn.scheduler.capacity.root.b.capacity</name>
  <value>99</value>
</property>
  1. 如果创建子队列。需要先把当前队列的状态改为“STOPPED”。RUNNING 状态的队列不能创建子队列,RUNNING 状态的队列下没有作业运行也不行。如在队列 b 下创建两个子队列 ba 和 bb。设置以下配置:
<property>
  <name>yarn.scheduler.capacity.root.b.state</name>
  <value>STOPPED</value>
</property>
  1. 队列的状态改成 “STOPPED” 之后,如果队列有作业在运行,还是不能创建子队列,需要杀死作业。
yarn app -kill ${app_id}
  1. 增加子队列
<property>
  <name>yarn.scheduler.capacity.root.b.queues</name>
  <value>ba, bb</value>
</property>
<property>
  <name>yarn.scheduler.capacity.root.b.ba.capacity</name>
  <value>30</value>
</property>

<property>
  <name>yarn.scheduler.capacity.root.b.bb.capacity</name>
  <value>70</value>
</property>

执行 yarn -rmadin -refreshQueues 之后,发现队列已经创建,但是状态是 STOPPED.

  1. “STOPPED” 状态下的队列,创建的子队列的状态也是 “STOPPED”, 需要改为"RUNNING". 注意,如果队列的状态是 STOPPED,不能把它的子队列设为 RUNNING,
<property>
  <name>yarn.scheduler.capacity.root.b.state</name>
  <value>RUNNING</value>
</property>
<property>
  <name>yarn.scheduler.capacity.root.b.ba.state</name>
  <value>RUNNING</value>
</property>
<property>
  <name>yarn.scheduler.capacity.root.b.bb.state</name>
  <value>RUNNING</value>
</property>
  1. 测试,提交到子队列 bb,注意队列名是叶子节点的队列名 bb,不是 b.bb 或者 root.b.bb。
 hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.4.jar pi  -D mapreduce.job.queuename=bb 1 1 

2. 测试 Node Label

2.1 启用 node-labels

修改 yarn-site.xml,设置之后需要重启 ResourceManager。

<property>
 <name>yarn.node-labels.enabled</name>
 <value>true</value>
</property>
<property>
 <name>yarn.node-labels.fs-store.root-dir</name>
 <value>/system/yarn/node-labels</value>
</property>
<property>
 <name>yarn.node-labels.configuration-type</name>
 <value>centralized</value>
</property>

2.2 操作 node-labels

2.2.1 增加 node-labels

yarn rmadmin -addToClusterNodeLabels LB(exclusive=true)

2.2.2 列出系统的 node-labels

yarn cluster --list-node-labels

2.2.3 删除系统的 node-labels

yarn rmadmin -removeFromClusterNodeLabels

2.3 给 node 赋相应的 label

下面的命令把 node “core-example3” 的标签改为 “LB”

yarn rmadmin -replaceLabelsOnNode "core-example3=LB"

参数用引号引起来是因为里面有 -,引号内的内容作为一个参数。= 前面是 node 的名称,= 后是 label 的名称。

2.4. 给队列赋 node-labels

现在只有 Capacity 调度算法支持 node-labels,队列的配置都在 capacity-scheduler.xml。

2.4.1 root 队列可以访问所有的 node-labels 的节点

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

2.4.2 设置新标签的 root 队列的 capacity

并且设置新标签的 capacity,注意,此设置是必须的,如果想要使某个子级队列有某个标签的容量,其父队列必须有该标签的容量,否则可以提交任务到子队列,但是申请不到任何容器。

<property>
  <name>yarn.scheduler.capacity.root.accessible-node-labels.label_1.capacity</name>
  <value>100</value>
  <description></description>
</property>

2.4.3 设置子队列可访问的标签

<property>
 <name>yarn.scheduler.capacity.root.b.bb.accessible-node-labels</name>
 <value>label_1</value>
</property>
<property>
 <name>yarn.scheduler.capacity.root.b.ba.accessible-node-labels</name>
 <value>label_1</value>
</property>

2.4.4 设置子队列的标签容量

设置子队列的标签容量。注意,某个队列的所有子队列对于某一 label 的 capacity 加在一起,必须等于 100.

<property>
  <name>yarn.scheduler.capacity.root.a.accessible-node-labels.label_1.capacity</name>
  <value>1</value>
</property>
<property>
  <name>yarn.scheduler.capacity.root.b.accessible-node-labels.label_1.capacity</name>
  <value>99</value>
</property>

2.4.5 测试

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.1.jar pi -D mapreduce.job.node-label-expression="label_1" -D mapreduce.job.queuename="bb" 1 1

3 默认和模板设置

如果一个队列有多个标签的资源,用户提交任务时,只指定到此队列,没有指定改队列的标签,则使用到此默认标签。

<property>
  <name>yarn.scheduler.capacity.root.b.default-node-label-expression</name>
  <value>label_1</value>
</property>

此模板设置某一个队列下的子队列,如果没有设置最大 am 使用的资源比例,则使用此设置。

<property>
   <name>yarn.scheduler.capacity.root.leaf-queue-template.maximum-am-resource-percent</name>
   <value>50</value>
 </property>

所有队列的属性都可以,举例如下:

<property>
  <name>yarn.scheduler.capacity.<queue-path>.leaf-queue-template.maximum-capacity</name>
  <value>100</value>
</property>
<property>
  <name>yarn.scheduler.capacity.<queue-path>.leaf-queue-template.user-limit-factor</name>
  <value>3.0</value>
</property>
<property>
  <name>yarn.scheduler.capacity.<queue-path>.leaf-queue-template.ordering-policy</name>
  <value>fair</value>
</property>

4. 只有 root 对于某些标签的 capacity 设置为不是100。

如 LC 标签的资源最多使用 50%, 可以这样设置。

<property>
  <name>yarn.scheduler.capacity.root.accessible-node-labels.LC.capacity</name>
  <value>50</value>
  <description></description>
</property>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值