节点属性的主要特征如下:
与标签不同,属性可以同时从集中式模式和分布式模式映射到节点。由于在不同模式下使用不同的前缀标识属性,因此不会发生冲突。如果是集中式属性,则用前缀“ rm.yarn.io”标识;如果是分布式,则属性用前缀“ nm.yarn.io”标识。这意味着属性由前缀和名称唯一标识。
与节点标签不同,不需要显式启用节点属性,因为它始终存在,即使不使用功能也不会影响性能或兼容性。
在yarn-site.xml中设置以下属性
属性 | 值 | 默认值 |
---|---|---|
yarn.node-attribute.fs-store.root-dir | 集中式属性映射的存储路径 | 文件:/// tmp / hadoop-yarn- $ {user} / node-attribute / |
yarn.node-attribute.fs-store.impl.class | 配置的类需要扩展org.apache.hadoop.yarn.nodelabels.NodeAttributeStore | FileSystemNodeAttributeStore |
笔记:
在集中化方法中,支持三个选项以将属性映射到节点:
添加执行纱线节点属性-添加“ node1:attribute [(type)] [= value],attribute2 node2:attribute2 [= value],attribute3将属性添加到节点,而不会影响节点上已经存在的映射。
remove执行中的纱线节点属性-remove“ node1:attribute,attribute1 node2:attribute2”删除节点的属性,而不会影响节点上已经存在的映射。
替换执行纱线节点属性-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 | 当使用“ config”,“ script”或“ class”扩展NodeAttributesProvider 配置“ yarn.nodemanager.node-attributes.provider”时,则会定期从节点属性提供程序中检索节点属性。此配置用于定义间隔时间。如果配置了-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 | 当使用“ config”配置“ yarn.nodemanager.node-attributes.provider”时,ConfigurationNodeAttributesProvider从该参数获取节点属性。 |
应用程序可以使用Placement Constraint API来指定节点属性请求,如Placement Constraint文档中所述。
这是使用NodeAttribute表达式创建Scheduling Request对象的示例:
// expression:AND(python!= 3:java = 1.8) SchedulingRequest scheduleRequest = SchedulingRequest.newBuilder()。executionType( ExecutionTypeRequest.newInstance(ExecutionType.GUARANTEED)) .allocationRequestId(10L).priority(Priority.newInstance(1)) .placementConstraintExpression( PlacementConstraints.and( 放置约束 .targetNodeAttribute(PlacementConstraints.NODE, NodeAttributeOpCode.NE, PlacementConstraints.PlacementTargets .nodeAttribute(“ python”,“ 3”)), 放置约束 .targetNodeAttribute(PlacementConstraints.NODE, NodeAttributeOpCode.EQ, PlacementConstraints.PlacementTargets .nodeAttribute(“ java”,“ 1.8”))) .build())。resourceSizing( ResourceSizing.newInstance(1,Resource.newInstance(1024,1))) 。建立();
上面的SchedulingRequest请求必须满足以下约束的节点上有1个容器:1.节点属性rm.yarn.io/python在该节点上不存在或存在,但其值不等于3。2 .节点属性rm。 yarn.io/java必须存在于节点上,并且其值等于1.8
作为http:// rm-http-address:port / ws / v1 / cluster / nodes / {nodeid}的一部分,可以获得REST输出属性及其映射到给定节点的值。