概述
Node label是将相似特点的节点进行分组的一种途径,application可以指定在哪里运行。现在我们只支持node partition:
- 一个node只能有一个node partition, 所以一个集群通过node partition被分为多个互斥的子集群。默认的,node都属于DEFAULT分区(partition="")。
- 用户需要配置每个partition可以使用不同的队列多少资源。更多详情请参考下面的章节。
- 有两种node partition:
- 互斥的:容器被分配到精确匹配的node partition的节点(如请求partition="x" 将会被分配到partition="x"的节点,请求DEFAULT partition将会被分配到DEFAULT 分区的节点。
- 非互斥的:如果一个partition是非互斥的,那么它共享闲置的资源给请求DEFAULT partition的容器。
用户可以指定能被每一个队列访问的node label集,一个application只能使用所属队列能够访问的node label的子集。
特性
目前Node Labels支持以下特性:
- Partition cluster - 每个node可以指定一个label,所以集群将会被分为多个小的互斥的partition。
- ACL of node-labels on queues - 用户能够设置每个队列可访问的node label,所以只有某些node可以被特定队列访问。
- 指定可以被队列访问的partition的资源百分比- 用户可以设置像这样的百分比:队列A可以访问具备lable=hbase label的node30%的资源。这样的百分比设置将会与现存的资源管理器保持一致。
- 在资源请求中指定必需的Node Label,它将会被分配到具有相同label的node。如果没有指定必需的node label,那么资源请求将会被分配到属于DEFAULT partition的node。
- 可运维性
- Node Label和节点的标签映射可以在RM restart中恢复。
- Update node labels -更新node label-管理员可以在RM运行过程中更新node、队列的labels。
配置信息
设置ResourceManager以启用Node Label:
在yarn-site.xml中设置以下属性
Property | Value |
yarn.node-labels.fs-store.root-dir | hdfs://namenode:port/path/to/store/node-labels/ |
yarn.node-labels.enabled | true |
备注:
- 确保yarn.node-labels.fs-store.root-dir是已经创建的,并且ResourceManager有权限访问。
- 如果用户想要存储node label到本地文件系统(替换hdfs),可以使用类似这样路径file:///home/yarn/node-label。
增加/修改node label列表以及node-to-labels映射
- 新增集群node label列表:
- 执行yarn rmadmin -addToClusterNodeLabels "label_1(exclusive=true/false),label_2(exclusive=true/false)" 进行node label添加。
- 如果用户没有指定“(exclusive=…)”,execlusive 默认为true.
- 运行 yarn cluster --list-node-labels 检查添加的node labels在集群中已经是可见的。
- 添加label到node
- 执行 yarn rmadmin -replaceLabelsOnNode “node1[:port]=label1 node2=label2”,增加label1到node1,label2到node2.如果用户没有指定port,它将会添加到运行在node上的所有NodeManager。
调度器与node label相关的配置项
Capacity Scheduler 配置
Property | Value |
yarn.scheduler.capacity.<queue-path>.capacity | 设置相应队列能够访问属于DEFAULT partition的节点的capacity百分比。每个parent之下的所有直接children的DEFAULT capacity总和必须是100. |
yarn.scheduler.capacity.<queue-path>.accessible-node-labels | 管理员需要指定每个队列能够访问的label,以英文逗号分隔,像这种形式;“hbase,storm” 表示队列能够访问hbase和storm label。所有队列都能访问没有label的node,用户不需要额外指定。如果用户没有指定该字段,它将会从parent继承。如果用户想明确指定一个队列只能访问没有label的node,只需要设置空格作为值。 |
yarn.scheduler.capacity.<queue-path>.accessible-node-labels.<label>.capacity | 设置队列能够访问<label> partition的node的百分比。每个父节点下直接children的<label> capacities的总和必须是100.默认是0. |
yarn.scheduler.capacity.<queue-path>.accessible-node-labels.<label>.maximum-capacity | 类似于yarn.scheduler.capacity.<queue-path>.maximum-capacity,它是每个队列对于label的maximum-capacity。默认值是100. |
yarn.scheduler.capacity.<queue-path>.default-node-label-expression | 值类似于"hbase",它的意思是:如果提交到队列的application,在其资源请求中没有指定node label,它会使用hbase作为default-node-label-expression。默认值为空,所以application会从没有node label的节点中获取容器。 |
node label配置的示例:
假定我们有这样一个队列结构
root / | \ engineer sales marketing
我们在集群中有5个node(hostname=h1..h5),其中的每一个有24G memory,24vcores。5个node之中的1个有GPU(假定是h5).所以管理员增加GPU label到h5.
Assume user have a Capacity Scheduler configuration like: (key=value is used here for readability)
假定用户的Capacity Scheduler配置如下: (此处的key=value处于可读性考虑)
yarn.scheduler.capacity.root.queues=engineering,marketing,sales 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,所以它们其中的每一个授权具有partition的1/3的资源。所以它们中的每一个能够使用h1..h4的1/3的资源,也就是24 * 4 * (1/3) = (32G mem, 32 v-cores)。另外只有engineering/marketing队列有权限访问GPU partition。
engineering/marketing中的每一个被授权具有partition=GPU label的资源的1/2.所以它们之中的每一个能够使用h5资源的1/2,也就是 24 * 0.5 = (12G mem, 12 v-cores).
备注:
- 完成CapacityScheduler的配置之后,执行yarn rmadmin -refreshQueues使变更生效。
- 到RM Web UI的调度页面检查你的配置是否成功设置。
为application指定node label
application可以使用如下Java APIs指定请求的node label。(API的描述就不翻译了)
- ApplicationSubmissionContext.setNodeLabelExpression(..) to set node label expression for all containers of the application.
- ResourceRequest.setNodeLabelExpression(..) to set node label expression for individual resource requests. This can overwrite node label expression set in ApplicationSubmissionContext
- Specify setAMContainerResourceRequest.setNodeLabelExpression in ApplicationSubmissionContext to indicate expected node label for application master container.
监控
通过Web UI监控
通过web UI可以看到以下label相关的字段:
- Nodes page: http://RM-Address:port/cluster/nodes, 你可以获取每个node的label。
- Node labels page: http://RM-Address:port/cluster/nodelabels, 你可以获取type(exclusive/non-exclusive),活跃的node manager数量,每个partition的资源总量。
- Scheduler page: http://RM-Address:port/cluster/scheduler, 你可以获取每个队列的label相关设置,以及每个队列partition的资源使用情况。
通过命令行监控
- 使用yarn cluster --list-node-labels 获取集群中的label。
- 使用yarn node -status <NodeId> 获取指定node的状态,状态信息包含labels
相关推荐
Hadoop 2.7.2引入了YARN(Yet Another Resource Negotiator),作为资源管理框架,负责调度和管理集群中的计算资源。相比早期版本,YARN提高了系统的可扩展性和安全性,降低了MapReduce的耦合度,使得其他计算框架如...
1. YARN改进:在Hadoop 2.7.2中,YARN(Yet Another Resource Negotiator)进一步提升了资源管理效率,优化了任务调度算法,降低了作业启动延迟,增强了系统的整体性能。 2. HDFS增强:增加了对大文件的支持,改进...
YARN(Yet Another Resource Negotiator)作为MapReduce 2的主要改进,分离了资源管理和作业调度,使得Hadoop能够更好地支持多种计算框架,如Spark、Tez等。 在Linux环境下部署Hadoop 2.7.2,首先需要在Window上解...
标签:apache、hadoop、api、yarn、jar包、java、API文档、中文版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准...
标签:apache、client、hadoop、yarn、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译...
- YARN:作为Hadoop的资源管理器,YARN在2.7.2版本中进一步提升了多应用程序并行运行的效率,优化了资源调度算法,减少了任务调度的延迟。 - HDFS:增强了HDFS的容错性和可用性,如改进了数据块的复制策略,提高了...
Hadoop 2.7.2是一个稳定版本,包含了分布式存储(HDFS)和计算框架(MapReduce),是大数据处理的基础。以下是关于如何在CentOS 7 64位系统上编译Hadoop 2.7.2源码库文件的详细步骤及相关的知识点: 1. **环境准备*...
Hadoop2.7.2LIUNX集群(2)所需JDK1.8.gzHadoop2.7.2LIUNX集群(2)所需JDK1.8.gzHadoop2.7.2LIUNX集群(2)所需JDK1.8.gzHadoop2.7.2LIUNX集群(2)所需JDK1.8.gz
Hadoop 2.7.2 是一个开源框架,主要用于分布式存储和计算,是大数据处理领域的重要组成部分。这个版本的Hadoop在2015年发布,提供了许多改进和新特性,使得它能在各种Linux环境下稳定运行,从而满足企业对大规模数据...
Windows10 环境下编译的Hadoop2.7.2 Windows10 环境下编译的Hadoop2.7.2 Windows10 环境下编译的Hadoop2.7.2
Apache Hadoop 2.7.2 是一个广泛使用的开源框架,专为分布式存储和计算而设计,是大数据处理领域的重要工具。源码包提供了一窥Hadoop内部运作机制的机会,对于开发者、研究者以及想要深入理解Hadoop工作原理的人来说...
较新版本的Hadoop2.x.y系列包括了YARN(Yet Another Resource Negotiator),这是一个资源管理平台,它改进了资源管理和作业调度的机制。老版本的Hadoop,如0.20或1.2.1版本,虽然在本教程中未详细涉及,但本教程的...
hadoop2.7.2安装依赖文件,用于在window下调试hadoop! hadoop2.7.2安装依赖文件,用于在window下调试hadoop hadoop2.7.2安装依赖文件,用于在window下调试hadoop
在这个名为“hadoop2.7.2安装依赖文件.zip”的压缩包中,包含了一系列在Windows环境下安装和运行Hadoop 2.7.2版本所必需的组件。下面我们将详细探讨这些文件及其在Hadoop生态系统中的作用。 首先,`hadoop.dll`是一...
本文将详细介绍这两个组件以及如何在Windows系统下配置Hadoop 2.7.2版本的开发环境。 首先,`hadoop.dll`是Hadoop在Windows平台上的一个动态链接库文件,它包含了Hadoop运行所需的特定功能。由于Hadoop主要设计为在...
8. **启动Hadoop服务**:最后,通过start-dfs.cmd和start-yarn.cmd脚本启动Hadoop的DataNodes、NameNodes以及ResourceManager等服务。 以上就是在Windows 7环境中安装和配置Hadoop 2.7.2所需的关键步骤,其中hadoop...
包含翻译后的API文档:hadoop-yarn-client-2.7.3-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.apache.hadoop:hadoop-yarn-client:2.7.3; 标签:apache、hadoop、yarn、client、中英对照文档、jar...
本文档将详细介绍如何搭建一个Hadoop 2.7.2版本的高可用(High Availability,简称HA)集群。此集群将包含五台服务器,分别命名为cancer01至cancer05,其中两台作为NameNode节点(活跃与备用),一台作为JournalNode...
这个"Hadoop_2.7.2安装包.rar"包含了Hadoop 2.7.2版本的所有组件,供用户在本地或者集群环境中搭建大数据处理平台。在这个版本中,Hadoop已经相当成熟,提供了稳定性和性能优化。 在安装Hadoop之前,我们需要了解...
这个压缩包文件“win10下编译过的hadoop2.7.2 jar包”是专门为在Windows 10操作系统上运行Hadoop 2.7.2版本而准备的。这个版本的Hadoop包含了所有必要的库文件和依赖,使得开发者能够在本地环境中配置和运行Hadoop...