开发者社区> ClouderaCDP> 正文

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. 输入配置的容量的 B1 100,然后点击保存。

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

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
配置mysql不区分大小写
应用场景 在使用mysql过程中,发现SQL语句查不出来东西,明明数据库中有这条数据,仔细检查SQL语句后发现,sql语句中是小写,但是数据库中是大写,然后就查不出,虽然调整和数据库中元数据大小写一致后可以查询出来,但是这样很不方便用户使用,需要进行设置。
1091 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
18391 0
ES集群安装配置
ElasticSearch是一个开源搜索服务框架,它已经成为搜索解决方案领域的重要成员。ElasticSearch还经常被用作文档数据库,这主要得益于它的分布式特性和实时搜索能力,另外,ElasticSearch支持越来越多的聚合功能,而且和Yarn、Hadoop、Hive、Pig、Spark、Flume等大数据处理框架的兼容性越来越好。
1355 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
24948 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
20101 0
+关注
25
文章
0
问答
来源圈子
更多
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载