Fanr

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

概述

节点属性是一种描述节点的方式没有资源保障。可以用来让应用挑选正确的节点

特性

节点属性有一下几个特性:

  • 一个节点可以有多个属性
  • 值可以与标记到节点的属性相关联,目前只支持字符串
  • 和node label不一样,node属性不需要在集群级别显示指定,但是有api可以列出集群级别的属性
  • 作为无形的资源,并不关联任何队列和对应的资源,属性也不需要授权
  • 和分配tag类似,应用使用这些属性决定容器的位置
  • 目前只支持等于和不等于
  • 节点属性是硬限制,也就是说只有的完全符合的情况的才能分配。也就是说,请求会被一直挂起知道约束被满足。
  • 操作性:
    • 节点属性和对应的node会在RM重启的时候恢复
    • 更新节点属性,在RM运行是,admin可以增加,删除修改属性。
  • 有2种方式NM到node属性的映射
    • 中心化:通过CLI,RPC,映射节点和节点属性
    • 分布式:通过NM中的Node Attributes Provider映射
  • 不想labels,属性可以同时使用中心化和分布式。
配置
设置ResourceManager的节点属性

配置在yarn-site.xml中

属性 描述
yarn.node-attribute.fs-store.root-dir 中心化节点属性映射存放的目录
yarn.node-attribute.fs-store.impl.class 配置org.apache.hadoop.yarn.nodelabels.NodeAttributeStore

注意:

  • 目录需要配置成RM有权限访问的目录
  • 如果是本地文件系统设置为file:///home/yarn/node-attributes ,hdfs目录:
     hdfs://namenode:port/path/to/store/node-attributes/
中心化节点属性映射
  • 增加:yarn nodeattributes -add “node1:attribute[(type)][=value],attribute2 node2:attribute2[=value],attribute3
  • 删除:yarn nodeattributes -remove “node1:attribute,attribute1 node2:attribute2"
  • 更新:yarn nodeattributes -replace “node1:attribute[(type)][=value],attribute1[=value],attribute2 node2:attribute2[=value],attribute3"
分布式属性映射

分布式映射,是通过配置的:

属性 描述
yarn.nodemanager.node-attributes.provider NM中node属性provider,script,config或者类名
yarn.nodemanager.node-attributes.provider.fetch-interval-ms 定期获取节点属性的时间
yarn.nodemanager.node-attributes.provider.fetch-timeout-ms 如果script,超时之后会被中断,超时时间
yarn.nodemanager.node-attributes.provider.script.path script路径
yarn.nodemanager.node-attributes.provider.script.opts 脚本需要的参数
yarn.nodemanager.node-attributes.provider.configured-node-attributes 当配置为config时,从参数获取节点属性
指定应用的节点属性

//expression : AND(python!=3:java=1.8)
SchedulingRequest schedulingRequest =
    SchedulingRequest.newBuilder().executionType(
        ExecutionTypeRequest.newInstance(ExecutionType.GUARANTEED))
        .allocationRequestId(10L).priority(Priority.newInstance(1))
        .placementConstraintExpression(
            PlacementConstraints.and(
                PlacementConstraints
                    .targetNodeAttribute(PlacementConstraints.NODE,
                        NodeAttributeOpCode.NE,
                        PlacementConstraints.PlacementTargets
                            .nodeAttribute("python", "3")),
                PlacementConstraints
                    .targetNodeAttribute(PlacementConstraints.NODE,
                        NodeAttributeOpCode.EQ,
                        PlacementConstraints.PlacementTargets
                            .nodeAttribute("java", "1.8")))
                .build()).resourceSizing(
        ResourceSizing.newInstance(1, Resource.newInstance(1024, 1)))
        .build();
监控

REST:http://rm-http-address:port/ws/v1/cluster/nodes/{nodeid} 
web UI:还不支持
通过命令行:

  • yarn cluster --list-node-attributes,从集群中获取所有属性
  • yarn nodeattributes -list  获取求你中的属性
  • yarn nodeattributes -attributestonodes -attributes ,单个属性配置的所有nodes
  • yarn nodeattributes -nodestoattributes -nodes 一个node的所有属性
  • yarn node -status 关联了这个值的node的所有属性
posted on 2021-06-28 11:29  Fanr_Zh  阅读(94)  评论(0编辑  收藏  举报