节点属性是一种无需资源保证即可描述一个节点的属性的方法。 应用程序可以使用大量这些属性的表达,来为要放置其容器的容器选择正确的节点。
节点属性的突出特性如下:
与标签不同,可以使用以下两种方式,通过为节点属性设置ResourceManager将属性映射到节点:
在yarn-site.xml设置如下属性:
Property | Value | Default Value |
---|---|---|
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 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
使用此命令中配置的属性替换节点的现有属性注意:
在分布式模式下配置节点的属性
Property | Value |
---|---|
yarn.nodemanager.node-attributes.provider | 管理员可以通过在NM中配置此参数来配置节点属性的provider。 管理员为provider配置 config, script或类名。配置的类需要扩展org.apache.hadoop.yarn.server.nodemanager.nodelabels.NodeAttributesProvider。 如果配置config,则使用ConfigurationNodeAttributesProvider,如果配置了“ script”,Script则将使用“ScriptBasedNodeAttributesProvider。 |
yarn.nodemanager.node-attributes.provider.fetch-interval-ms | 当使用config,script或configured clas扩展了yarn.nodemanager.node-attributes.provider时,会定期从节点属性提供者中检索节点属性。 此配置用于定义间隔时间。 如果配置了-1,则仅在初始化期间从提供程序中检索节点属性。 默认为10分钟。 |
yarn.nodemanager.node-attributes.provider.fetch-timeout-ms | 当用脚本配置yarn.nodemanager.node-attributes.provider时,此配置将提供超时时间,在此之后它将中断查询节点属性的脚本。 默认为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 | 当用config配置yarn.nodemanager.node-attributes.provider时,ConfigurationNodeAttributesProvider从该参数获取节点属性。 |
应用程序可以使用Placement Constraint API来指定节点属性请求,如Placement Constraint文档中所述。
以下是使用NodeAttribute表达式创建Scheduling Request对象的示例:
//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个容器必须满足以下约束:
作为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
,将列出所有与节点关联的属性及其值内容来源于网络,如有侵权,请联系作者删除!