节点属性是一种描述节点属性的方法,无需资源保证。应用程序可以使用它来根据这些属性的多种表达方式选择适合其容器放置的正确节点。
节点属性
的显著功能如下
与标签不同,属性可以同时从集中式和分布式模式映射到节点。由于属性在不同模式下使用不同的前缀进行标识,因此不会发生冲突。如果是集中式属性,则使用前缀“rm.yarn.io”进行标识,如果是分布式属性,则使用前缀“nm.yarn.io”进行标识。这意味着属性由前缀和名称唯一标识。
与节点标签不同,节点属性不需要显式启用,因为它始终存在,即使不使用该功能,也不会对性能或兼容性产生影响。
在 yarn-site.xml
中设置以下属性
属性 | 值 | 默认值 |
---|---|---|
yarn.node-attribute.fs-store.root-dir | 存储集中属性映射的路径 | file:///tmp/hadoop-yarn-${user}/node-attribute/ |
yarn.node-attribute.fs-store.impl.class | 配置的类需要扩展 org.apache.hadoop.yarn.nodelabels.NodeAttributeStore | FileSystemNodeAttributeStore |
注释
yarn.node-attribute.fs-store.root-dir
是使用资源管理器进程用户创建的,并且 ResourceManager
具有访问权限。(通常来自“yarn”用户)file:///home/yarn/node-attributes
之类的路径,否则如果在 hdfs 中可以使用 hdfs://namenode:port/path/to/store/node-attributes/
之类的路径。在 集中方法中支持三种选项来将属性映射到节点
add 执行 yarn nodeattributes -add “node1:attribute[(type)][=value],attribute2 node2:attribute2[=value],attribute3
会将属性添加到节点,而不会影响节点上已存在的映射。
remove 执行 yarn nodeattributes -remove “node1:attribute,attribute1 node2:attribute2"
会将属性从节点中删除,而不会影响节点上已存在的映射。
replace 执行 yarn nodeattributes -replace “node1:attribute[(type)][=value],attribute1[=value],attribute2 node2:attribute2[=value],attribute3""
会用作为此命令一部分配置的属性替换节点的现有属性。
注释
在 分布式模式下将属性配置到节点
属性 | 值 |
---|---|
yarn.nodemanager.node-attributes.provider | 管理员可以通过在 NM 中配置此参数来配置节点属性的提供程序。管理员可以配置提供程序的“config”、“script”或类名。配置的类需要扩展 org.apache.hadoop.yarn.server.nodemanager.nodelabels.NodeAttributesProvider。如果配置了“config”,则会使用 “ConfigurationNodeAttributesProvider”,如果配置了“script”,则会使用 “ScriptBasedNodeAttributesProvider”。 |
yarn.nodemanager.node-attributes.provider.fetch-interval-ms | 当 “yarn.nodemanager.node-attributes.provider” 配置为 “config”、“script” 或 配置类 扩展 NodeAttributesProvider 时,将定期从节点属性提供程序检索节点属性。此配置用于定义间隔周期。如果配置为 -1,则仅在初始化期间从提供程序检索节点属性。默认为 10 分钟。 |
yarn.nodemanager.node-attributes.provider.fetch-timeout-ms | 当 “yarn.nodemanager.node-attributes.provider” 配置为 “script” 时,此配置提供超时周期,在此之后它将中断查询节点属性的脚本。默认为 20 分钟。 |
yarn.nodemanager.node-attributes.provider.script.path | NM 运行的节点属性脚本用于收集节点属性。脚本输出中以 “NODE_ATTRIBUTE:” 开头的行将被视为节点属性记录,属性名称、类型和值应以逗号分隔。每行都将被解析为一个节点属性。 |
yarn.nodemanager.node-attributes.provider.script.opts | 传递给节点属性脚本的参数。 |
yarn.nodemanager.node-attributes.provider.configured-node-attributes | 当 “yarn.nodemanager.node-attributes.provider” 配置为 “config” 时,ConfigurationNodeAttributesProvider 从此参数中获取节点属性。 |
应用程序可以使用放置约束 API 来指定节点属性请求,如 放置约束文档 中所述。
以下是一个使用节点属性表达式的创建调度请求对象的示例
//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();
上述 SchedulingRequest 请求 1 个容器,该容器必须满足以下约束
节点属性 rm.yarn.io/python
不存在于节点上,或存在但其值不等于 3
节点属性 rm.yarn.io/java
必须存在于节点上,且其值等于 1.8
作为 http://rm-http-address:port/ws/v1/cluster/nodes/{nodeid}
REST 输出的一部分,可以获取映射到给定节点的属性及其值。
尚未支持
yarn cluster --list-node-attributes
获取集群中的所有属性yarn nodeattributes -list
获取集群中的属性yarn nodeattributes -attributestonodes -attributes <Attributes>
为每个属性列出所有映射的节点以及为每个节点配置的属性值。我们还可以使用 -attributes 为指定属性指定。yarn nodeattributes -nodestoattributes -nodes <Host Names>
列出映射到节点的所有属性及其值。我们还可以使用 -nodes 为指定节点指定。yarn node -status
获取的节点状态/详细信息将列出与节点关联的所有属性及其值。