节点标签是对具有相似特征的节点进行分组的一种方法,应用程序可以指定在何处运行。
现在我们仅支持节点分区,即:
用户可以指定每个队列可以访问的一组节点标签,一个应用程序只能使用包含应用程序的队列可以访问的节点标签的子集。
该节点标签支持以下,现在的特点:
在yarn-site.xml中设置以下属性
属性 | 值 |
---|---|
yarn.node-labels.fs-store.root-dir | hdfs:// namenode:port / path / to / store / node-labels / |
yarn.node-labels.enabled | 真正 |
yarn.node-labels.configuration-type | 设置节点标签的配置类型。管理员可以指定“集中式”,“授权下放式”或“分布式”。默认值为“集中”。 |
笔记:
在集中式 NodeLabel设置中配置节点到标签的映射
在分布式 NodeLabel设置中配置节点到标签的映射
属性 | 值 |
---|---|
yarn.node-labels.configuration-type | 需要在RM中设置为“分布式”,以从NM中已配置的节点标签提供程序获取节点到标签的映射。 |
yarn.nodemanager.node-labels.provider | 在RM中将“ yarn.node-labels.configuration-type”配置为“ distributed”时,管理员可以通过在NM中配置此参数来配置节点标签的提供程序。管理员可以配置提供者的“ config”,“ script”或类名。配置的类需要扩展org.apache.hadoop.yarn.server.nodemanager.nodelabels.NodeLabelsProvider。如果配置了“ config”,则配置了“ ConfigurationNodeLabelsProvider”,如果配置了“ script”,则将使用“ ScriptNodeLabelsProvider”。 |
yarn.nodemanager.node-labels.resync-interval-ms | NM与RM同步其节点标签的时间间隔。NM将每配置x个间隔将其加载的标签以及心跳发送给RM。即使未修改标签,也需要进行此重新同步,因为admin可能已删除了NM提供的群集标签。默认值为2分钟。 |
yarn.nodemanager.node-labels.provider.fetch-interval-ms | 当使用“ config”,“ script”或“ class”扩展AbstractNodeLabelsProvider 配置“ yarn.nodemanager.node-labels.provider”时,则定期从节点标签提供者中检索节点标签。此配置用于定义间隔时间。如果配置了-1,则仅在初始化期间从提供程序中检索节点标签。默认为10分钟。 |
yarn.nodemanager.node-labels.provider.fetch-timeout-ms | 当“ yarn.nodemanager.node-labels.provider”配置为“ script”时,此配置将提供超时时间,在此之后它将中断查询节点标签的脚本。默认为20分钟。 |
yarn.nodemanager.node-labels.provider.script.path | 要运行的节点标签脚本。以“ NODE_PARTITION:”开头的脚本输出行将被视为节点标签分区。如果脚本输出的多行具有此模式,则将考虑最后一行。 |
yarn.nodemanager.node-labels.provider.script.opts | 传递给节点标签脚本的参数。 |
yarn.nodemanager.node-labels.provider.configured-node-partition | 当“yarn.nodemanager.node-labels.provider”配置有“配置”,然后取出ConfigurationNodeLabelsProvider从该参数的分区标记。 |
属性 | 值 |
---|---|
yarn.node-labels.configuration-type | 需要设置为“代理集中式”,以从RM中已配置的节点标签提供程序获取节点到标签的映射。 |
yarn.resourcemanager.node-labels.provider | 如果将“ yarn.node-labels.configuration-type”配置为“ delegated-centralized”,则管理员应配置该类,以便通过ResourceManager获取节点标签。配置的类需要扩展org.apache.hadoop.yarn.server.resourcemanager.nodelabels.RMNodeLabelsMappingProvider。 |
yarn.resourcemanager.node-labels.provider.fetch-interval-ms | 当“ yarn.node-labels.configuration-type”配置为“ delegated-centralized”时,则定期从节点标签提供程序中检索节点标签。此配置用于定义间隔。如果配置了-1,则在每个节点注册后,仅从提供程序中检索节点标签一次。默认为30分钟。 |
属性 | 值 |
---|---|
yarn.scheduler.capacity。<queue-path> .capacity | 设置可以访问属于DEFAULT分区的节点的队列百分比。每个父母下直系子女的默认能力总和必须等于100。 |
yarn.scheduler.capacity。<queue-path> .accessible-node-labels | 管理员需要指定每个队列可以访问的标签,并用逗号分隔,例如“ hbase,storm”表示队列可以访问标签hbase和storm。所有队列都可以访问无标签的节点,用户不必指定。如果用户未指定此字段,它将从其父级继承。如果用户要明确指定一个队列,则只能访问没有标签的节点,只需在该值前放置一个空格即可。 |
yarn.scheduler.capacity。<queue-path> .accessible-node-labels。<label> .capacity | 设置可以访问属于<label>分区的节点的队列的百分比。每个父级下直系孩子的<label>能力总和必须等于100。默认情况下为0。 |
yarn.scheduler.capacity。<queue-path> .accessible-node-labels。<label>。最大容量 | 类似于yarn.scheduler.capacity。<queue-path> .maximum-capacity,它用于每个队列的标签的最大容量。默认情况下为100。 |
yarn.scheduler.capacity。<队列路径> .default-node-label-expression | 类似于“ hbase”的值,表示:如果应用程序提交到队列时未在资源请求中指定节点标签,它将使用“ hbase”作为default-node-label-expression。默认情况下为空,因此应用程序将从没有标签的节点获取容器。 |
节点标签配置的示例:
假设我们有一个队列结构
根 / | \ 工程师销售营销
集群中有5个节点(主机名= h1..h5),每个节点都有24G内存和24个vcore。5个节点中有1个具有GPU(假设是h5)。因此,管理员在h5中添加了GPU标签。
假设用户具有如下的Capacity Scheduler配置:(在此处使用key = value以提高可读性)
yarn.scheduler.capacity.root.queues =工程,市场营销,销售 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
您可以看到root.engineering/marketing/sales.capacity=33,因此它们每个人都可以保证等于资源的1/3 而不划分分区。因此他们每个人都可以使用h1..h4的1/3资源,即24 * 4 *(1/3)=(32G mem,32个v核)。
而且只有工程/销售队列有权访问GPU分区(请参阅root。<queue-name> .accessible-node-labels)。
每个工程/营销队列均已保证资源等于partition = GPU的资源的1/2 。因此他们每个人都可以使用h5的1/2资源,即24 * 0.5 =(12G mem,12个v-core)。
笔记:
应用程序可以使用以下Java API来指定要请求的节点标签
在Web UI上可以看到以下与标签相关的字段: