概述
节点标签是对节点分组,应用可以指定在哪里运行。
先在只支持node分区:
1.一个node 只能有一个标签,默认标签为default
2.用户需要配置一个分区可以有多少资源
3.有2种节点分区
3.1 独占的,当准确的匹配node分区的时候
3.2非独占,就是没有准确的node 分区,被分配到默认分区。
用户可以设置node标签,可以被所有的队列访问,一个应用只能使用node标签下的子节点。
特性
node标签支持以下一些特性:
- 分组集群:每个node可以关联一个标签,所以整个集群会被分为几个分区。
- node标签在队列的ACL:用户在每个队列上设置node标签,这样的话每个队列只能访问一部分节点
- 指定队列能够访问资源的百分比
- 请求时可以指定node标签,若找不到node标签会被分配到default分区。
- 可操作性:
- RM重启node标签映射也会被恢复
- 更新node标签,admin可以更新node标签,当rm运行的时候。
- 有3中方式从NM映射到node标签
- 中心化:通过CLI,REST,RPC完成node 到标签的映射
- 分布式:可以通过配置NM中的node标签提供方来完成node 到标签的映射,目前有2中方式:1.脚本,2。配置
- 延迟中心化:可以通过配置RM中的node标签提供方来完成node 到标签的映射。
配置
RM启动node标签
在yarn-site.xml中设置
属性 | 值 |
---|---|
yarn.node-labels.fs-store.root-dir | hdfs://namenode:port/path/to/store/node-labels/ |
yarn.node-labels.enabled | true |
yarn.node-labels.configuration-type | “centralized”, “delegated-centralized” , “distributed”. Default value is “centralized”. |
注意:
- 保证yarn.node-labels.fs-store.root-dir被窗前,并且RM有权限访问
- 如果需要保存在本地文件系统路径设置为file:///home/yarn/node-label
增加删除node标签
- 增加一个node标签列表
- 执行yarn rmadmin -addToClusterNodeLabels "label_1(exclusive=true/false),label_2(exclusive=true/false)"
- exclusive,默认为true
- 运行yarn cluster --list-node-labels检查
删除node标签
- 删除集群node标签
- 删除 yarn rmadmin -removeFromClusterNodeLabels "
- 如果已经被分配到队列,那么无法删除标签
- 为了验证node标签是否被删除,运行yarn cluster --list-node-labels
增加node到标签的映射
- 中心化配置:
- 执行yarn rmadmin -replaceLabelsOnNode “node1[:port]=label1 node2=label2” [-failOnUnknownNodes].把node1映射到label1,node2映射到label2
- 分布式node标签映射:
属性 | 值 |
---|---|
yarn.node-labels.configuration-type | 如:distributed |
yarn.nodemanager.node-labels.provider | 如果为distributed,用户可以配置config,script或者class。 |
yarn.nodemanager.node-labels.resync-interval-ms | 定时从RM同步标签 |
yarn.nodemanager.node-labels.provider.fetch-interval-ms | 定期从node标签提供者获取标签 |
yarn.nodemanager.node-labels.provider.fetch-timeout-ms | 如果提供者是script,如果配置了超时,超时的时候会中断标签获取 |
yarn.nodemanager.node-labels.provider.script.path | 脚本位置 |
yarn.nodemanager.node-labels.provider.script.opts | 脚本参数 |
yarn.nodemanager.node-labels.provider.configured-node-partition | 如果提供者是配置,从这个 配置中回去分区标签 |
- 延迟中心化配置
属性 | 值 |
---|---|
yarn.node-labels.configuration-type | delegated-centralized |
yarn.resourcemanager.node-labels.provider | 延迟中心化,管理员需要配置类名用来获取节点标签,org.apache.hadoop.yarn.server.resourcemanager.nodelabels.RMNodeLabelsMappingProvider |
yarn.resourcemanager.node-labels.provider.fetch-interval-ms | 定期从node标签提供者获取node标签 |
配置调度器的node标签
- 容量调度器配置
yarn.scheduler.capacity. |
设置队列可以访问默认分区的容量 |
yarn.scheduler.capacity. |
配置每个队列可以访问的node标签,如“hbase,storm” |
yarn.scheduler.capacity. |
设置队列可以访问标签分区中的容量百分比 |
yarn.scheduler.capacity. |
指定标签,队列最大可访问容量 |
yarn.scheduler.capacity. |
设置默认的标签,如果没有指定标签,会被分配到该标签 |
如队列结构:
root
graph TD A[root] --> B(enginer) A[root] --> C(sales) A[root] --> D(marketing)一共有5个节点(h1…h5),每个节点,有24G内存,24核。
有如下配置:
yarn.scheduler.capacity.root.queues=engineering,marketing,sales
yarn.scheduler.capacity.root.engineering.capacity=33
yarn.scheduler.capacity.root.marketing.capacity=34
yarn.scheduler.capacity.root.sales.capacity=33
yarn.scheduler.capacity.root.engineering.accessible-node-labels=GPU
yarn.scheduler.capacity.root.marketing.accessible-node-labels=GPU
yarn.scheduler.capacity.root.engineering.accessible-node-labels.GPU.capacity=50
yarn.scheduler.capacity.root.marketing.accessible-node-labels.GPU.capacity=50
yarn.scheduler.capacity.root.engineering.default-node-label-expression=GPU