这是CDP中Yarn使用手册系列的一篇。之前的文章请参考《Apache Hadoop Yarn概述》、《CDP中使用YARN Web UI和CLI》、《CDP中配置Apache Hadoop Yarn的安全性》、《CDP中Yarn资源调度与管理》、《CDP中Yarn管理队列》、《Yarn在全局级别配置调度程序属性》、《Yarn配置每个队列属性》、《Yarn管理放置规则》。
动态队列是在应用程序运行时自动创建的。当 YARN 服务重新启动时,它们将被删除。
动态队列是在运行时自动创建的。capacity-scheduler.xml
配置文件中没有定义动态队列 。动态队列可以在那些允许动态自动子创建的静态父项下创建。必须使用 YARN 队列管理器 UI 显式设置动态自动子创建。
您可以通过两种方式创建动态队列:
· 动态队列路径由提交者在提交作业时指定。如果为队列路径中提供的父队列启用了动态自动子创建功能,则将创建动态队列。
· 放置规则适用于可将其放入动态队列的已提交作业。动态队列是根据动态放置规则的预定义表达式创建的。
根据您的资源分配模式,动态队列的管理方式不同:
在绝对和相对模式下,当您为队列启用动态自动子创建功能时,它将成为托管父队列。它不能有静态子队列,它下面的队列只能动态创建。它允许 1 级动态队列嵌套。
在权重模式下,没有托管父队列。当您为某个队列启用动态自动子创建功能时,它会成为一个可以同时拥有静态和动态子队列的父队列。它允许 2 级动态队列嵌套。
注意
尽管可以使用安全阀配置片段来配置动态队列,但Cloudera 建议使用 YARN 队列管理器 UI 进行动态队列配置,即使这会导致一些限制。
1 托管父队列
托管父队列是在绝对和相对资源分配模式下动态自动创建子队列。
在绝对和相对模式下,当您为队列启用动态自动子创建时,它将成为托管父队列。它不能有静态子队列,其下的队列只能动态创建。
在绝对和相对模式下,动态创建的队列始终属于预定义(静态)队列,即托管父队列。这将嵌套限制为仅一层。此外,为托管父队列设置的队列属性将应用于其所有动态创建的子队列。要更改其所有动态子队列的队列属性,您必须更改托管父队列级别的配置。
通过错误地设置托管父队列,可以动态创建零容量队列。
例如,您可以创建一个托管父队列并为其动态创建的子队列分配一个基于百分比的最小容量限制 5%。在这种情况下,最多 20 个队列可以在 5% 的容量限制下运行。这会强制所有后续队列等待,直到队列被释放(如果队列中没有应用程序正在运行,则其容量设置为零)。因此,以考虑应该并行运行的队列数量的方式设计属于托管父队列的子队列的最小容量限制至关重要。
2 将队列转换为托管父队列
在绝对和相对模式下,您必须创建托管父队列以启用动态队列创建。您可以通过 YARN 队列管理器 UI 执行此操作。
请注意,在托管父队列级别设置的队列属性适用于其所有叶队列。
重要的
为队列启用动态自动子创建后,您将无法禁用它。如果您错误地启用它,您必须删除队列及其子队列,然后重新创建它们。
1. 在Cloudera Manager 中,选择YARN Queue Manager UI。
图形队列层次结构显示在 概览选项卡中。
2. 找到要为其启用动态自动子创建功能的队列。
3. 选择更多选项菜单并选择 启用动态自动子创建。
4. 设置队列的最小和最大容量。
5. 点击保存。
要定义可能导致动态创建子队列的放置规则,请确保在放置规则创建期间选择创建目标队列(如果不存在?)。选项并提供托管父队列作为父队列。有关详细信息,请参阅管理放置规则。
3 在权重模式下启用动态自动子创建
在权重模式下,当您为队列启用动态自动创建子队列时,它将成为一个可以同时拥有静态和动态子队列的父队列。您可以通过 YARN 队列管理器 UI 启用该功能。
在权重模式下,没有托管父队列。当您为某个队列启用动态自动子创建功能时,它将成为一个可以同时拥有静态和动态子队列的父队列。如果未启用此功能,则队列只能有静态子队列。
与动态队列嵌套级别仅限于一级的管理父队列相反,在权重模式下,动态自动子创建允许您创建 2 级动态队列。
重要的
为队列启用动态自动子创建后,您将无法禁用它。如果您错误地启用它,您必须删除队列及其子队列,然后重新创建它们。
由于一个已知问题,您只能为已经有至少一个子队列的队列启用动态自动子创建。这意味着您必须在要为其启用此功能的父队列下创建至少一个静态子队列。
为父队列启用动态自动子创建后,如果您的设置只需要动态子队列,您可以停止和删除静态子队列。
1. 在Cloudera Manager 中,选择YARN Queue Manager UI。
图形队列层次结构显示在 概览选项卡中。
2. 找到要为其启用动态自动子创建功能的队列。
3. 选择更多选项菜单并选择 启用动态自动子创建。
为队列启用了动态自动子创建,并且队列名称旁边会显示一个螺栓图标。
如果不需要,请先删除您创建的静态子队列,然后再为该队列启用动态自动子创建功能。
如果要定义可能导致动态创建子队列的放置规则,请确保在创建放置规则期间选中创建目标队列,如果它不存在?属性并提供启用动态自动子创建的父队列。有关详细信息,请参阅 管理放置规则。
4 管理动态自动子创建启用父队列
Cloudera Manager 中的 YARN 队列管理器 UI 提供了队列层次结构的概览,您可以在其中查看和管理启用了动态自动子创建的父队列。
1. 在Cloudera Manager 中,选择YARN Queue Manager UI。
图形队列层次结构显示在 概览选项卡中。启用动态自动子创建的父队列的队列名称旁边会显示一个螺栓图标。
2. 选择三个垂直点并为启用动态自动子创建的父队列选择以下操作之一:
o 查看/编辑队列属性:在相对和绝对资源分配模式下,您可以查看和编辑队列属性的 动态自动创建队列部分 。在权重资源分配模式下,您只能查看该部分。
o 添加子队列:仅在权重模式下支持,其中动态父队列可以同时拥有静态和动态子队列。
o 删除队列:您必须先停止队列,然后才能删除它。
注意
您不能删除 root
和root.default
队列。
o 停止队列/停止队列及其子队列:停止队列及其子队列(如果有)。
注意
在权重模式下,如果队列有动态创建的子队列,一旦停止动态子队列,将无法重新启动。
o 编辑动态子队列容量:仅在绝对和相对模式下受支持。
o 更多信息:您将被重定向到 资源管理器UIv2 队列页面。
5 管理动态创建的子队列
YARN 队列管理器 UI 提供了队列层次结构的概览,您可以在其中查看和管理动态创建的子队列。
您不能直接删除动态创建的子队列。有关动态队列删除的更多信息,请参阅删除动态创建的子队列。
1. 在Cloudera Manager 中,选择YARN Queue Manager UI。
图形队列层次结构显示在 概览选项卡中。在启用了动态自动子创建的父队列的队列名称旁边会显示一个叶子。
2. 选择更多选项菜单并为动态创建的队列执行以下操作之一:
o 查看/编辑队列属性:在相对和绝对资源分配模式下可用。
o 更多信息:您将被重定向到 资源管理器UIv2 队列页面。
6 删除动态创建的子队列
您不能直接删除动态创建的子队列,但有一些解决方法可以删除它们。例如,当该队列中的应用程序终止时,它会很有用。
有两种方法可以删除动态创建的子队列:
· 重新启动 YARN 服务:这会停止并删除所有动态创建的队列。
· 停止然后删除动态创建的子队列的父队列:这将删除动态父队列及其所有子队列 - 静态和动态的。