这是CDP中Yarn使用手册系列的一篇。之前的文章请参考《Apache Hadoop Yarn概述》、《CDP中使用YARN Web UI和CLI》、《CDP中配置Apache Hadoop Yarn的安全性》、《CDP中Yarn资源调度与管理》、《CDP中Yarn管理队列》、《Yarn在全局级别配置调度程序属性》、《Yarn配置每个队列属性》。
放置规则可以定义在指定应将哪个队列用于提交的作业时考虑的逻辑。这些预定义规则使您可以在提交作业时无需指定队列名称即可提交作业。
有两种队列可以提交作业:
· 静态队列:始终存在且由用户使用队列管理器 UI(或配置文件)定义的队列。
· 动态队列:当作业提交给它们时动态创建的队列。如果 YARN 服务重新启动,它们将被自动删除。要了解有关动态队列的更多信息,请参阅管理动态队列。
放置规则使您能够定义提交作业时应用的逻辑,以指定应将哪个队列用于提交的作业。这使您可以在不定义目标队列的情况下提交作业,甚至可以覆盖提交者在作业提交期间指定的目标队列。
默认情况下,只有在作业提交期间未指定目标队列或指定的目标队列作为“默认”提供时,才会考虑放置规则。要更改此行为,请参阅启用默认队列映射的覆盖。
放置规则按照它们在放置规则列表中出现的顺序进行评估。当提交作业并且必须考虑放置规则时,将对规则进行评估,并使用第一个匹配规则来确定作业运行的队列。
如果在作业提交过程中没有放置规则且未指定目标队列,则作业将提交到调度程序的默认队列。
如果放置规则的目标队列不存在或无法创建,则执行配置的回退操作。您可以为每个放置规则配置回退操作,它可以具有以下值:
· 跳过:忽略当前规则并继续下一个。
· PlaceDefault:将应用程序放置到默认队列 root.default
(除非它被其他东西覆盖)。
· 拒绝:拒绝提交。
如果在作业提交过程中没有指定目标队列,并且没有与作业匹配的放置规则,则将作业提交到调度程序的默认队列。
默认情况下,如果在作业提交期间指定了无效队列,则提交将被拒绝。要更改此行为,请参阅启用默认队列映射的覆盖。
重要
尽管可以使用安全阀配置片段来配置放置规则,但Cloudera 建议使用 YARN 队列管理器 UI 进行放置规则配置和管理,即使这会导致一些限制。尤其重要的是不要使用安全阀配置片段来设置旧的放置规则策略格式。您必须使用新的基于 JSON 的放置规则格式。
1 放置规则策略
创建放置规则时,您必须设置其策略。您可以选择许多预定义的策略,也可以创建自定义策略。
重要的
在引用队列时,Cloudera 建议始终提供父队列。虽然,在容量调度程序中,您只能通过叶队列名称来引用队列,但如果有更多具有相同名称的叶队列,则可能会导致问题。提供父队列可确保将引用转换为完全限定的路径,即不会有歧义。
下表列出了策略的名称、队列管理器UI 的“放置规则创建”对话框中显示的选项及其详细说明:
表 1.放置规则策略
策略 |
队列管理器用户界面 |
描述 |
用户 |
将应用程序放入以用户命名的队列中。 |
将应用程序放入与提交者用户名匹配的队列中。 |
主要组 |
将应用程序放入以用户的主要组命名的队列中。 |
将应用程序放入与提交者的主要组匹配的队列中。 |
主要组用户 |
将应用程序放入以用户命名的队列中,该用户是以用户的主要组命名的队列的子级。 |
将应用程序放入队列层次结构中 |
次要组 |
将应用程序放入以用户的次要组命名的队列中。 |
将应用程序放入与提交者的次要组匹配的队列中。 |
次要组用户 |
将应用程序放入以用户命名的队列中,该用户是为用户的次要组命名的队列的子级。 |
将应用程序放入队列层次结构中 |
应用名称 |
将应用程序放入以应用程序命名的队列中。 |
将应用程序放入与应用程序名称匹配的队列中。 重要的 它区分大小写,不会删除空格。 |
指定 |
将应用程序放入运行时指定的队列中。 |
将应用程序置于提交期间定义的队列中。 |
拒绝 |
拒绝申请。 |
拒绝提交。 |
默认队列 |
将应用程序放入默认队列。 |
将应用程序放入默认队列 root.default 或其覆盖值。 |
设置默认队列 |
将默认队列设置为: |
从 root.default 更改默认队列。 此策略不会永久更改默认队列。当提交申请时开始评估时,它始终是“root.default”。 但是,调整后的默认队列将一直有效,直到放置规则评估完成。 |
Custom |
使用以下自定义策略: |
使用户能够使用自定义放置字符串。 |
1.1 自定义放置策略
该custom
放置策略可以描述与相应的变量占位符的其他策略。例如,primaryGroupUser
与父队列root.groups
可以表示为: root.groups.%primary_group.%user
如果您打算使用该策略,自定义策略变量表描述了哪些变量可用custom
。
在内部,该工具使用适当的值填充某些变量。如果custom
选择了映射策略,则可以使用这些。放置规则评估引擎在替换它们时只进行最少的验证。因此,您有责任提供正确的字符串。
表 2.自定义策略变量
变量 |
意义 |
|
提交的应用程序的名称。 |
|
调度程序的默认队列。 |
|
提交者的主要群体。 |
|
提交者的次要(补充)组。 |
|
包含提交者定义的队列。 它是一个独立变量,请勿将其与其他自定义变量或路径结合使用。 如果指定的目标队列是 |
|
提交申请的用户。 |
如果将 MapReduce 应用程序提交到队列root.users.mrjobs
,则值%specified
将设置为 root.users.mrjobs
。
很少有策略可以实现custom
。您可以使用custom
该将customPlacement
字段设置为%specified
,而不是使用该specified
策略。
但是,您可以对其进行更多控制,因为您还可以向这些变量附加或预先添加一个额外的字符串。因此可以进行以下设置:root.groups.%primary_group.admins.%user.longrunningjobs
该字符串必须解析为有效的队列路径才能正确放置。
1.2 传统模式和权重模式之间的差异
在某些情况下,传统资源分配模式(绝对和相对模式)的行为与权重模式不同。
该create
标志
· 传统模式:如果父级不受管理,则无效。
· 权重模式:适用于所有父队列。但是,如果 yarn.scheduler.capacity.<queue-path>.auto-queue-creation-v2.enabled
设置为false
,则不会创建队列。
嵌套规则primaryGroupUser
和 secondaryGroupUser
· 传统模式:他们希望父队列存在,这意味着它们不能自动创建。更具体地说,当你使用primaryGroupUser
它时会导致一个类似于父队列的队列路径,root.<primaryGroup>.<userName>
并且root.<primaryGroup>
父队列必须存在。它可以是托管父级,以便 userName
自动创建叶,但仍必须手动创建父级。
· 权重模式:只要父级允许创建动态队列,就没有限制。将创建请求的队列。
2 如何阅读放置规则表
在队列管理器 UI 中,您可以在一页上查看所有放置规则。了解此页面可以帮助您根据需要管理放置规则。
如果您选择队列管理器 UI,然后转到放置规则选项卡,则放置规则概览页面将显示在 Cloudera Manager 中 。它显示一个包含以下列的表格:
表 1.放置规则概览页面
列名 |
描述 |
Order |
从上到下评估放置规则。此列提供放置规则的顺序。 |
Type |
向引擎指示当前规则应该匹配的对象:应用程序、用户或组。 值: |
Match |
要匹配的字符串,或表示“全部”的星号“*”。例如,如果类型为 User 且此字符串为“hadoop”,则仅当提交者用户为“hadoop”时才会评估规则。“*”不适用于组。 |
Policy |
定义应用程序放置位置的预定义或自定义策略。 值: |
Parent Queue |
在的情况下 |
Custom Value |
它可以有两种类型的值: · 在 · 在 |
创建队列? |
它设置 如果设置为 但是,即使设置为 以下策略不支持该 · · · |
Fallback |
如果目标队列不存在或无法创建,则定义回退操作。 值: |
Actions |
单击适用的图标以对放置规则执行操作: · Eye:查看规则 · Bin:删除规则 |
3 创建放置规则
放置规则确定应用程序和作业分配到的队列。您可以使用 YARN 队列管理器 UI 创建放置规则。
如果放置规则使用静态队列,则必须先创建目标叶队列,然后再创建使用它的放置规则。创建放置规则时,UI 将显示所有现有叶队列。
如果放置规则使用动态创建的队列,您必须在创建使用它的放置规则之前为目标父队列启用动态自动子创建功能。创建规则时,UI 将显示所有现有队列作为目标父队列选项,但如果未为所选队列启用动态自动子创建功能,则会显示警告消息,您无法创建放置规则。有关更多信息,请参阅管理动态队列。
1. 在Cloudera Manager 中,选择YARN Queue Manager UI。
图形队列层次结构显示在概览 选项卡中。
2. 转到放置规则选项卡。
3. 单击+添加。
在添加放置规则对话框dsiplayed使用默认设置,或与是您所创建的最后位置规则的精确副本设置。
4. 设置您希望规则匹配的应用程序参数:
o 规则应匹配应用程序:设置与此规则匹配的应用程序参数。
o 此规则应匹配:设置与此规则匹配的值。
5. 设置当应用程序匹配时规则应该做什么。
匹配应用程序时,请执行以下操作: 设置放置规则策略。
6. 设置应提交作业的队列的父级。
放置应用程序的队列的父队列应该是: 从下拉列表中选择一个可用的父队列。
重要的
Cloudera 建议在父队列是可用属性时始终设置它,即使它只是可选的。这样可以避免同名叶子队列引起的问题。
7. 如果要创建目标队列,如果它不存在选择如果不存在则 创建目标队列?复选框。要启用此功能,您必须在步骤6 中设置一个父队列。
注意
如果您希望创建不存在的目标队列,则必须为您选择的父队列启用动态自动子创建功能。
8. 设置回退动作。
9. 检查您的放置规则设置。
注意
创建放置规则后,您将无法对其进行编辑。如果您想更改放置规则的设置,您必须删除它,然后使用正确的值重新创建它。
10.单击“确定”。
11.提供更改的说明,然后单击“确定”。
该规则将添加到放置规则列表的底部,并成为要评估的最后一个规则。
3.1 示例 - 创建放置规则
您必须设置放置规则以满足您的特定需求。在此示例中,开发人员、QA 工程师和测试开发人员共享一个集群,您要设置九个放置逻辑。
以下是创建放置规则时要实现的放置逻辑:
1. 如果用户属于devs
主要组,则应将应用程序放置到root.users.devs
。这是为开发人员保留的。
2. 如果用户属于qa
主要组,则应用程序应转到root.users.lowpriogroups.<primaryGroup>
。这些队列的容量较低,供测试人员使用。
3. 如果用户属于qa-dev
主要组,则应用程序应转到root.users.highpriogroups.<primaryGroup>
。这些队列具有更高的容量,供测试开发人员使用。
4. 将应用程序放入与用户名匹配的队列中。
5. 如果没有这样的队列,则从应用程序提交上下文中获取该队列,但如果该队列不存在且父级被管理,则不应创建该队列。
6. 如果以上都不匹配,则应将应用程序放入 root.default
队列中。
7. 如果默认放置失败,请将默认队列更改为 root.users.default
。
8. 再次尝试放置到默认队列。
9. 如果失败,则完全拒绝提交。
使用队列管理器 UI,可以通过以下方式实现此逻辑:
3.1.1 队列层次结构
名称旁边带有螺栓标志的队列是启用了动态自动子创建的父项。
3.2 放置规则概述
4 重新排序放置规则
放置规则按照它们在放置规则列表中出现的顺序进行评估。提交作业时,会评估规则,并使用第一个匹配规则来确定运行作业的队列。
提交作业时,会从上到下评估规则,使用第一个匹配规则来确定作业运行的队列。
如果始终满足某个规则,则不会评估后续规则。默认情况下,放置规则按添加顺序排列;首先添加的规则首先出现。您可以轻松地重新排序规则。
1. 在Cloudera Manager 中,选择 YARN Queue Manager UI。
图形队列层次结构显示在概览 选项卡中。
2. 转到放置规则选项卡。
显示放置规则列表。
3. 单击重新排序。
仅当您至少有两个放置规则时,重新排序选项才可用。
4. 单击规则行中的上移和下移箭头按钮。
5. 单击保存重新排序。
5 删除放置规则
YARN 队列管理器 UI 使您能够删除以前创建的放置规则。如果要删除与放置规则关联的队列,首先必须删除其关联的放置规则。
1. 在Cloudera Manager 中,选择 YARN Queue Manager UI。
图形队列层次结构显示在概览 选项卡中。
2. 单击放置规则选项卡。
显示放置规则列表。
3. 在操作列中,单击要删除的放置规则所在行中的Bin图标。
4. 点击保存。
6 启用覆盖默认队列映射
默认情况下,仅当在作业提交期间未指定目标队列时才考虑放置规则。您可以更改该行为以考虑放置规则是否在作业提交时指定了目标队列。
该yarn.scheduler.capacity.queue-mappings-override.enable
属性控制何时考虑放置规则。在 YARN 队列管理器 UI 中,此属性称为Override Queue Mapping。默认情况下,该属性设置为 false
,这意味着该功能被禁用并且放置规则无法覆盖在作业提交时指定的目标队列。
下表显示了如何指定在不同场景下作业应使用哪个队列:
表 1.目标队列规范场景
覆盖队列映射 |
在作业提交时指定目标队列? |
放置规则存在吗? |
最终结果 |
已禁用(设置为 |
是的 |
是的 |
作业被提交到提交者指定的队列。 |
已禁用(设置为 |
是的 |
不 |
作业被提交到提交者指定的队列。 |
已禁用(设置为 |
不 |
是的 |
放置规则指定目标队列。 |
已禁用(设置为 |
不 |
不 |
作业被提交到调度程序的默认队列 ( |
已启用(设置为 |
是的 |
是的 |
放置规则指定目标队列。 |
已启用(设置为 |
是的 |
不 |
作业被提交到提交者指定的队列。 |
已启用(设置为 |
不 |
是的 |
放置规则指定目标队列。 |
已启用(设置为 |
不 |
不 |
作业被提交到调度程序的默认队列 ( |
当放置规则覆盖作业提交时定义的目标队列时,如果使用specified
放置规则策略,仍然可以考虑指定的队列。有关详细信息,请参阅放置规则策略。
1. 在Cloudera Manager 中,选择 YARN Queue Manager UI。
图形队列层次结构显示在概览 选项卡中。
2. 转到调度程序配置选项卡。
3. 找到 覆盖队列映射属性。默认情况下它是禁用的。
4. 选中该框以启用此功能。
5. 点击保存。
6. 提供更改的说明,然后单击“确定”。
即使在作业提交期间指定了目标队列,也会考虑放置规则。