Yarn配置分区

简介: 您可以将集群划分为子集群,以便作业在具有特定特征的节点上运行。您可以配置这些分区,以便在指定分区的集群节点上运行 YARN 应用程序。

您可以将集群划分为子集群,以便作业在具有特定特征的节点上运行。您可以配置这些分区,以便在指定分区的集群节点上运行 YARN 应用程序。

注意

为了与 YARN 术语保持一致,使用术语分区而不是节点标签

分区可以指定为exclusive non-exclusive/shareable

·      exclusive -访问仅限于在与分区关联的队列中运行的应用程序。

·      non-exclusive -如果分区上有空闲容量可用,则资源与集群中的所有应用程序共享。

YARN 中调度的基本单位是队列。每个队列的容量指定可用于提交到队列的应用程序的集群资源的百分比。队列可以按层次结构设置,以反映利用集群资源的各种组织、组和用户所需的资源要求和访问限制。

使用分区,您可以将集群划分为子集群,以便作业可以在具有特定特征的分区上运行。例如,您可以使用分区仅在具有较大 RAM 量的节点上运行内存密集型作业。分区可以分配给集群节点,并指定为独占或非独占。然后,您可以将分区与容量调度程序队列相关联。每个节点只能与一个分区相关联。

1     分区类型

1.1  分区类型:独占

当一个队列与一个或多个独占分区相关联时,该队列提交的所有应用程序都将独占访问这些分区中的节点。

图片 1.png

1.2  分区类型:非独占

当一个队列与一个或多个非独占分区相关联时,该队列提交的所有应用程序在这些分区中的节点上获得第一优先级。如果这些分区节点上有空闲容量可用,则资源将与集群中的其他应用程序共享。如果标记的应用程序在标记的节点上请求新资源,则未标记的应用程序被抢占。

图片 2.png

1.3  没有关联分区的队列

如果没有为队列分配分区,则队列提交的应用程序可以在没有分区的任何节点上运行,如果有空闲资源,则可以在具有非独占分区的节点上运行。

1.4  抢占

请求标记资源的标记应用抢占标记节点上的非标记应用。如果未明确请求标记资源,则适用正常的抢占规则。未标记的应用程序不能抢占在标记节点上运行的标记应用程序。

2     在集群上启用节点标签以配置分区

您可以通过在 YARN ResourceManager 主机上进行配置更改来配置集群上的分区。

要在集群上启用分区,请在 YARN ResourceManager 主机上进行以下配置更改。

1.   HDFS 中创建标签目录

使用以下命令创建一个“node-labels”目录,用于在 HDFS 中存储节点标签。


//

sudo su hdfs
hadoop fs -mkdir -p /yarn/node-labels
hadoop fs -chown -R yarn:yarn /yarn
hadoop fs -chmod -R 700 /yarn

-chmod -R 700指定只有 YARN 用户可以访问 node-labels目录。

然后您可以使用以下命令确认该目录是在 HDFS 中创建的。

hadoop fs -ls /yarn

 节点标签目录应出现在以下命令返回的列表中。所有者应该是yarn,并且许可应该是 drwx

找到 1 个项目

drwx------ - yarnyarn 0 2014-11-24 13:09 /yarn/node-labels

使用以下命令创建/user/<user_name> 分布式 shell 所需的目录。


/

hadoop fs -mkdir -p /user/<user_name>
hadoop fs -chown -R yarn:yarn /user/<user_name>
hadoop fs -chmod -R 700 /user/<user_name>

2.   Cloudera Manager 中,选择YARN服务。

3.   单击配置选项卡。

4.   搜索YARN Service Advanced Configuration

5.   yarn-site.xmlYARN 服务高级配置片段(安全阀)中添加以下内容:

o   设置以下属性以启用分区:

名称:yarn.node-labels.enabled

值:true

o   设置以下属性以引用 HDFS 分区目录

名称:yarn.node-labels.fs-store.root-dir

值:hdfs://:/

例如,

名称:yarn.node-labels.fs-store.root-dir

值:hdfs://node-1.example.com:8020/yarn/node-labels/

6.   启动或重新启动 YARN ResourceManager

3    创建分区

您必须首先创建分区以将它们分配给节点并将其与队列关联。

在创建分区之前,您必须在集群上启用节点标签。有关更多信息,请参阅在集群上启用节点标签

1.   Cloudera Manager 中,选择Clusters > YARN Queue Manager UI服务。图形队列层次结构显示在 概览选项卡中。

2.   单击分区选项卡。

3.   单击+创建。显示创建分区 对话框。

图片 3.png

4.   Partition Name 中为分区添加一个名称。

5.   Partition Type下选择ExclusiveNon-Exclusive 节点标签类型。有关独占或非独占分区类型的信息,请参阅配置分区

6.   选择未分配节点下列出的一个或多个未分配节点,然后单击<箭头按钮将其移动到已分配节点下以将其分配给分区。您还可以使用正则表达式搜索或过滤节点。

7.   点击保存。

4     为分区分配或取消分配节点

您可以为现有分区分配或取消分配节点。

1.   Cloudera Manager 中,选择Clusters > YARN Queue Manager UI服务。图形队列层次结构显示在 概览选项卡中。

2.   单击分区选项卡。显示分区列表。

3.   单击分区右侧的编辑图标。

4.   编辑分区对话框中分配或取消分配节点。

a.   分配节点:选择未分配节点下列出的未 分配节点,然后单击<箭头按钮将其移动到已 分配节点下

b.   取消分配节点:选择已分配节点下列出的 分配节点,然后单击>箭头按钮将其移至 未分配节点下

5.   点击保存。

5    查看分区

您可以查看集群中可用分区的列表。对于每个分区,它会在Hosts列下列出关联节点的数量以及分区类型和容量。

1.   Cloudera Manager 中,选择Clusters > YARN Queue Manager UI服务。图形队列层次结构显示在 概览选项卡中。

2.   单击分区选项卡。显示现有分区的列表。

3.   或者,您可以单击主机 列中列出的数字以查看关联的节点。

图片 4.png

5.1  查看节点标签分配

您可以使用以下命令查看分区信息。

·      列出集群中所有正在运行的节点: yarn node -list

例子:


/

[root@node-1 /]# yarn node -list
14/11/21 12:14:06 INFO impl.TimelineClientImpl: Timeline service address: http://node-1.example.com:8188/ws/v1/timeline/
14/11/21 12:14:07 INFO client.RMProxy: Connecting to ResourceManager at node-1.example.com/240.0.0.10:8032
Total Nodes:3
 Node-Id Node-State Node-Http-Address Number-of-Running-Containers
node-3.example.com:45454 RUNNING node-3.example.com:50060 0
node-1.example.com:45454 RUNNING node-1.example.com:50060 0
node-2.example.com:45454 RUNNING node-2.example.com:50060 0

·      列出节点的状态(包括分区): yarn node -status <Node_ID>

例子:

[root@node-1 /]# yarn node -status node-1.example.com:45454
14/11/21 06:32:35 INFO impl.TimelineClientImpl: Timeline service address: http://node-1.example.com:8188/ws/v1/timeline/
14/11/21 06:32:35 INFO client.RMProxy: Connecting to ResourceManager at node-1.example.com/240.0.0.10:8032
Node Report : 
 Node-Id : node-1.example.com:45454
 Rack : /default-rack
 Node-State : RUNNING
 Node-Http-Address : node-1.example.com:50060
 Last-Health-Update : Fri 21/Nov/14 06:32:09:473PST
 Health-Report : 
 Containers : 0
 Memory-Used : 0MB
 Memory-Capacity : 1408MB
 CPU-Used : 0 vcores
 CPU-Capacity : 8 vcores
 Node-Labels : x

分区也显示在节点和调度程序页面上的ResourceManager UI 中。

6    将分区与队列关联

您可以使用分区在具有指定分区的集群节点上运行 YARN 应用程序。

在关联分区之前,您必须创建分区并将分区分配给集群节点。有关创建分区的更多信息,请参阅创建分区

注意

将分区与一个或多个队列关联后,在YARN 队列管理器 UI 中,单击 下拉列表中的概览> <分区名称>,然后在切换分配模式或创建放置规则之前将容量分配给队列。

注意

为了与 YARN 术语保持一致,使用术语分区而不是节点标签

使用队列管理器创建分区并将其分配给集群节点,将分区 ( yarn.scheduler.capacity.<queue-path>.accessible-node-labels )与队列相关联,并为指定分区配置该队列的容量。队列管理器在分区中的所有队列之间平均分配可用容量。您可以手动修改每个队列的每个分区的容量,并确保每个级别的父队列的直接子队列的每个分区的容量总和等于 100%。队列可以访问的分区(队列的可访问分区)必须与其父队列的可访问分区相同或其子集。

假设一个集群共有 8 个节点。前 3 个节点 (n1-n3) partition = x,接下来的3 个节点 (n4-n6) partition = y,最后 2 个节点 (n7, n8) 没有任何分区。每个节点可以运行 10 个容器。

队列层次结构如下:

图片 5.jpg

假设队列“a”可以访问分区“x”“y”,而队列“b”只能访问分区“y”。根据定义,所有队列都可以访问没有标签的节点。

在相对资源分配模式下,考虑队列的以下示例标签配置:

容量(a= 40,容量(a,标签= x= 100,容量(a,标签= y= 50;容量(b= 60,容量(b,标签= y= 50

这意味着:

·      队列“a”可以访问没有任何标签的节点上40%的资源,标签=x节点上100%的资源,以及标签=y节点上50%的资源。

·      队列“b”可以访问没有任何标签的节点上60%的资源,以及标签=y的节点上50%的资源。

您还可以看到此配置:

容量(a) + 容量(b) = 100

capacity(a, label=x) + capacity(b, label=x) (b不能访问label=x,为0) = 100

容量(a, 标签=y) + 容量(b, 标签=y) = 100

对于同一个父队列下的子队列,每个标签的容量总和应该等于 100%

同样,您可以设置子队列 a1a2 b1 的容量:

a1a2:容量(a.a1)=40,容量(a.a1,标签=x)=30,容量(a.a1,标签=y)=50容量(a.a2)=60,容量(a .a2,标签=x)=70,容量(a.a2,标签=y)=50

b1:容量(b.b1= 100,容量(b.b1,标签=y= 100

您可以看到 a1 a2 配置:

容量(a.a1) + 容量(a.a2) = 100

容量(a.a1, 标签=x) + 容量(a.a2, 标签=x) = 100

容量(a.a1, 标签=y) + 容量(a.a2, 标签=y) = 100

a1 可以排队访问多少资源?

没有标签的节点上的资源:Resource = 20(可以在没有标签的节点上分配的容器总数,在本例中为n7n8* 40%a.capacity* 40%a.a1.capacity= 3.2 (容器)

标签=x 的节点上的资源

资源 = 30(可以在标签=x 的节点上分配的容器总数,在本例中为 n1-n3* 100%a.labelx.capacity* 30% = 9(容器)

要实现此示例配置,请执行以下操作

1.   Cloudera Manager 中,选择集群> YARN 队列管理器 UI 服务。图形队列层次结构显示在概览选项卡中。

2.   点击三个垂直圆点上一个队列,并选择查看/编辑队列属性选项。

3.   队列属性对话框,对话框中,选择X从标签 残疾人专用分区下拉框中,单击+再次选择Ÿ标签从残疾人专用分区下拉boxand点击保存

图片 6.png

4.   重复上述步骤为a1a2队列分配x标签 

5.   单击b queue上的三个垂直点,然后选择View/Edit Queue Properties选项。

6.   Queue Properties对话框中,从Accessible Partitions 下拉框中选择y标签,单击+然后单击Save

7.   重复上述步骤,为b1aa1a2队列分配y标签。

队列管理器自动在分区中的所有队列之间分配可用容量。如果要修改队列的容量,请单击概览选项卡中的 分区下拉框 ,选择标签并修改队列容量。

8.   概览选项卡中,单击 分区下拉框并选择标签y

9.   单击a队列上的三个垂直点,然后选择Edit Child Queues选项。

10. 输入a150a250 配置容量,然后单击保存

11. 单击b队列上的三个垂直点并选择Edit Child Queues选项。

12. 输入配置的容量B1100,然后点击保存

13. 单击队列上的三个垂直点,然后选择编辑子队列选项。

14. 输入a50b50 配置容量,然后单击保存

7     将分区与队列分离

您可以取消分区与队列的关联。您应该在删除队列之前解除分区的关联。在取消分区与队列的关联之前,您应该通过将其设置为零来删除该队列的分区容量。

  1. Cloudera Manager 中,选择Clusters > YARN Queue Manager UI服务。图形队列层次结构显示在概览选项卡中。
  2. 单击队列上的三个垂直点,然后选择查看/编辑队列属性选项。
  3. 队列属性对话框中的可访问分区中,单击分区名称旁边的X

图片 7.png

  1. 点击保存。

8    删除分区

在此版本中,由于已知问题,如果分区与队列关联并且队列具有为该分区配置的容量,则不建议删除该分区。

9    提交作业时使用分区

提交作业时,您可以使用各种方法来指定分区。

·      提交作业时设置分区

提交作业时,您可以使用以下方法指定分区:

o   ApplicationSubmissionContext.setNodeLabelExpression(<node_label_expression>) - 为应用程序的所有容器设置分区表达式。

o   ResourceRequest.setNodeLabelExpression(<node_label_expression>) - 为单个资源请求设置分区表达式。这将覆盖中设置的分区表达式 ApplicationSubmissionContext.setNodeLabelExpression(<node_label_expression>)

o   指定 setAMContainerResourceRequest.setNodeLabelExpression inApplicationSubmissionContext以指示 ApplicationMaster 容器的预期分区。

-queue当您使用分布式 shell 客户端提交 YARN 作业时,您可以使用这些方法之一来指定分区表达式和 指定队列。如果队列具有满足标签表达式的标签,它将在分区上运行作业。如果标签表达式未引用与指定队列关联的标签,则作业不会运行并返回错误。如果未指定 partitionn,则作业仅在没有分区的节点上运行,如果空闲资源可用,则在具有非独占分区的节点上运行。

注意

您只能在.setNodeLabelExpression方法中指定一个分区 

例如,以下命令运行一个简单的 YARN 分布式 shell“长时间睡眠作业。在此示例中,您要求的容器数量超过集群可以运行的数量,以便您可以查看作业在哪个节点上运行。我们指定作业应该在队列“a1”上运行,我们的用户有权在该队列上运行作业。我们还使用-node_label_expression 参数来指定作业将在标签为“x”的所有节点上运行。

sudo su yarn
hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-yarn/hadoop-yarn-applications-distributedshell.jar
 -shell_command "sleep 100" -jar /opt/cloudera/parcels/CDH/lib/hadoop-yarn/hadoop-yarn-applications-distributedshell.jar
 -num_containers 30 -queue a1 -node_label_expression x

如果您在我们之前配置的示例集群上运行此作业,则会在节点 1 上分配容器,因为该节点已分配分区“x”,并且队列“a1”也具有分区“x”

以下命令运行您为分区“x”指定的相同作业,但这次您将指定队列“b1”而不是队列“a1”

sudo su yarn
hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-yarn/hadoop-yarn-applications-distributedshell.jar
 -shell_command "sleep 100000" -jar /opt/cloudera/parcels/CDH/lib/hadoop-yarn/hadoop-yarn-applications-distributedshell.jar
 -num_containers 30 -queue b1 -node_label_expression x

当您尝试在我们的示例集群上运行此作业时,该作业将失败并显示以下错误消息,因为标签“x”与队列“b1”无关。

14/11/24 13:42:21 INFO distributedshell.Client: Submitting application to ASM
14/11/24 13:42:21 FATAL distributedshell.Client: Error running Client
org.apache.hadoop.yarn.exceptions.InvalidResourceRequestException: Invalid resource request, queue=b1 doesn't 
have permission to access all labels in resource request. labelExpression of resource request=x. Queue labels=y

·      MapReduce 作业和分区

当前,您无法在提交 MapReduce 作业时指定分区。但是,如果您将 MapReduce 作业提交到具有默认分区表达式的队列,则默认分区将应用于 MapReduce 作业。

使用默认分区表达式往往会限制集群的较大部分,这在某些时候开始对作业(例如 MapReduce 作业)产生反作用,这些作业受益于分布式并行处理提供的优势。

原文链接:https://docs.cloudera.com/cdp-private-cloud-base/latest/yarn-allocate-resources/topics/yarn-configure-partition-a-cluster.html

10        提供对队列管理器 UI 的只读访问

您现在可以允许非管理员用户以只读模式访问 YARN 队列管理器。您可以在 Cloudera Manager 中创建具有只读角色的新用户帐户或使用具有只读角色的任何现有用户帐户来访问 YARN 队列管理器 UI。在只读访问模式下,用户可以查看所有配置,但不能对配置进行任何更改。

在 Cloudera Manager 中,单击Administration > Users & Roles

图片 8.png

1.   提供用户名、密码,然后从 角色下拉列表中选择只读

图片 9.png

2.   单击添加

有关分配用户角色的更多信息,请参阅 Cloudera Manager 用户角色

3.   在左侧导航窗格中单击您的用户名,然后选择Sign Out

4.   以新创建的只读用户身份登录 Cloudera Manager

5.   单击集群 > YARN 队列管理器 UI服务。该YARN队列管理器UI显示不带编辑选项。

图片 10.png

原文链接:https://docs.cloudera.com/cdp-private-cloud-base/latest/yarn-allocate-resources/topics/yarn-provide-readonly-access-qm.html

 

目录
相关文章
|
15天前
|
消息中间件 资源调度 关系型数据库
如何在Flink on YARN环境中配置Debezium CDC 3.0,以实现实时捕获数据库变更事件并将其传输到Flink进行处理
本文介绍了如何在Flink on YARN环境中配置Debezium CDC 3.0,以实现实时捕获数据库变更事件并将其传输到Flink进行处理。主要内容包括安装Debezium、配置Kafka Connect、创建Flink任务以及启动任务的具体步骤,为构建实时数据管道提供了详细指导。
43 9
|
1月前
|
资源调度
Ubuntu22.04静态ip配置+yarn build后显示内存超限,变异失败
Ubuntu22.04静态ip配置+yarn build后显示内存超限,变异失败
38 2
Ubuntu22.04静态ip配置+yarn build后显示内存超限,变异失败
|
1月前
|
XML 分布式计算 资源调度
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(一)
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(一)
152 5
|
1月前
|
XML 资源调度 网络协议
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(二)
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(二)
90 4
|
1月前
|
分布式计算 资源调度 Hadoop
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
77 4
|
3月前
|
资源调度 关系型数据库 MySQL
【Flink on YARN + CDC 3.0】神操作!看完这篇教程,你也能成为数据流处理高手!从零开始,一步步教会你在Flink on YARN模式下如何配置Debezium CDC 3.0,让你的数据库变更数据瞬间飞起来!
【8月更文挑战第15天】随着Apache Flink的普及,企业广泛采用Flink on YARN部署流处理应用,高效利用集群资源。变更数据捕获(CDC)工具在现代数据栈中至关重要,能实时捕捉数据库变化并转发给下游系统处理。本文以Flink on YARN为例,介绍如何在Debezium CDC 3.0中配置MySQL连接器,实现数据流处理。首先确保YARN上已部署Flink集群,接着安装Debezium MySQL连接器并配置Kafka Connect。最后,创建Flink任务消费变更事件并提交任务到Flink集群。通过这些步骤,可以构建出从数据库变更到实时处理的无缝数据管道。
300 2
|
4月前
|
缓存 资源调度 JavaScript
秒懂Yarn:从安装到配置的全流程详解
**Yarn**是Facebook推出的JavaScript包管理器,旨在提供更快、更安全的依赖管理。它通过并行安装、离线模式、版本锁定和友好的命令行界面提升效率。要安装Yarn,可以使用npm、Homebrew或Chocolatey。基本命令包括初始化项目(`yarn init`)、安装/移除/升级依赖(`yarn add/remove/upgrade`)。配置Yarn涉及设置`.yarnrc`文件,如更改registry。通过`yarn.lock`文件保证依赖一致性。文章还提供了使用Yarn进行API测试和项目管理的实战案例。
242 0
|
6月前
|
SQL 分布式计算 资源调度
Hadoop Yarn 配置多队列的容量调度器
配置Hadoop多队列容量调度器,编辑`capacity-scheduler.xml`,新增`hive`队列,`default`队列占总内存40%,最大60%;`hive`队列占60%,最大80%。配置包括队列容量、用户权限和应用生存时间等,配置后使用`yarn rmadmin -refreshQueues`刷新队列,无需重启集群。多队列配置可在Yarn WEB界面查看。
97 4
|
5月前
|
资源调度 JavaScript iOS开发
yarn的安装与配置(Windows/macOS)
yarn的安装与配置(Windows/macOS)
591 0
|
6月前
|
资源调度 前端开发 JavaScript
nvm,npm,yarn相关指令,前端配置准备
nvm,npm,yarn相关指令,前端配置准备
56 1