Hadoop 节点标签

节点标签

https://hadoop.apache.org/docs/r2.7.3/hadoop-yarn/hadoop-yarn-site/NodeLabel.html

 

概览

节点标签:将具有相同特征的一组节点标记为相同,并打标签,程序可以运行在指定标签的节点上。

当前只支持节点分区(node partition,可以理解为组):

1)一个节点只能属于一个分区,这样一个集群被分割为几个不相交的子集群。默认,所有计算节点的分区标签为:DEFAULT

2)单独一个队列需要使用每个分区的多少资源,这需要提前配置好

3)节点分区有2种。

  • 独占型:容器(container,yarn中的角色)将被分配到相应标签的节点上。比如,请求分区为x,则会分配到x节点上;请分区为DEFAULT,则会分配到DEFAULT节点上。

  • 非独占型:如果一个分区是非独占,会将空闲资源共享给请求DEFAULT分区的容器

应用程序只能使用包含该应用程序的对应分区。

特点

  • 一个集群被拆分为多个不相交的分区

  • 每个分区可以为队列设置ACL,标签后的节点只允许有权限的队列访问

  • 在一个分区上,可以为每个队列设置资源百分比

  • 在资源请求中需要携带节点标签,如果没有,则分配DEFAULT分区资源

  • 生效:节点标签设置后,在RM重启时生效;RM如果在运行时,可以借助admin命令来更新

配置

1,设置ResourceManager来开启节点标签。

在yarn-site.xml中配置:

Property

Value

yarn.node-labels.fs-store.root-dir

hdfs://namenode:port/path/to/store/node-labels/

yarn.node-labels.enabled

TRUE

注意:

  • 确保yarn.node-labels.fs-store.root-dir配置的目录存在,并且有权限

  • 也可以使用本地目录,参考配置为:file://home/hadoop/Data/tmp

 

2,增加/更新节点标签。

  • 增加节点标签列表

    • 增加:yarn rmadmin -addToClusterNodeLabels "label_1(exclusive=true/false),label_2(exclusive=true/false)"

    • exclusive默认为true

    • 检查:yarn cluster --list-node-labels

  • 给节点增加标签

    • yarn rmadmin -replaceLabelsOnNode "node1[:port]=label1 node2=label2"

    • 如果没有指定port,则会为默认为该实例上所有Nodemanager打上相同标签

3,给节点标签配置调度器。

Property

Value

yarn.scheduler.capacity.<queue-path>.capacity

Set the percentage of the queue can access to nodes belong to DEFAULT partition. The sum of DEFAULT capacities for direct children under each parent, must be equal to 100.

yarn.scheduler.capacity.<queue-path>.accessible-node-labels

Admin need specify labels can be accessible by each queue, split by comma, like “hbase,storm” means queue can access label hbase and storm. All queues can access to nodes without label, user don’t have to specify that. If user don’t specify this field, it will inherit from its parent. If user want to explicitly specify a queue can only access nodes without labels, just put a space as the value.

yarn.scheduler.capacity.<queue-path>.accessible-node-labels.<label>.capacity

设置队列访问分区的百分比

The sum of <label> capacities for direct children under each parent, must be equal to 100. By default, it’s 0.

yarn.scheduler.capacity.<queue-path>.accessible-node-labels.<label>.maximum-capacity

与yarn.scheduler.capacity.<queue-path>.maximum-capacity配置类似,为每个队列设置使用该分区的最大容量,默认为100。

yarn.scheduler.capacity.<queue-path>.default-node-label-expression

比如取值为“hbase”,如果应用程序提交请求时没有指定标签,则该使用“hbase”作为默认标签。如果没有配置,则会从没有配置标签的节点上选择。

配置样例:

假如当前的队列结构为:

              root

               / | \

engineer sales marketing

有5个实例(主机名分别为h1,h2...h5),每个实例有24G内存,24个核,h5为GPU,h5的节点标签为h5。

假如用户有一个容量调度器的配置如下:

 

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

  • engineering,marketing,sales队列分别可以保证使用没有进行分区资源的33%,34%,33%。也就是,这3个队列分别可以使用h1,h2,h3,h4的三分之一资源(32G,32G,32G;32c,32c,32c)

  • 只有engineering,marketing可以访问GPU分区资源,每个队列分别可以使用GPU分区的一半资源

  • 配置完容量调度器之后,执行yarn rmadmin -refreshQueues生效,在调度器UI界面再次确认是否生效

应用程序中配置节点标签

应用程序在请求时,可以通过JAVA api来指定节点标签:

  • ApplicationSubmissionContext.setNodeLabelExpression(..)可以为程序的所有容器来指定标签

  • ResourceRequest.setNodeLabelExpression(..)为某一个单独的资源请求来指定标签,这个也可以覆盖 ApplicationSubmissionContext中的标签

  • 在ApplicationSubmissionContext中设置setAMContainerResourceRequest.setNodeLabelExpression,来为应用程序的主容器来指定节点标签

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值