这是CDP中Yarn使用系列中的一篇,之前的文章请参考<使用YARN Web UI和CLI>、<CDP 中配置Yarn的安全性>、<CDP的Yarn资源调度与管理>、<CDP中Yarn管理队列>和<Yarn在全局级别配置调度程序属性>。
队列属性包含定义队列行为的设置。使用队列属性,您可以定义不需要直接从父队列继承属性的设置,并定义特定于队列的设置。
在 Cloudera Manager 中,您可以使用队列属性来查看和配置队列属性。
设置分配给每个叶队列用户的最小资源百分比。
最小用户限制(最小用户极限百分比)属性可以用于设置分配给每个叶队列用户资源的最小百分比。例如,要在五个用户之间平等共享“服务”叶队列容量,您可以将最小用户限制百分比设置为 20%。
根据本例配置用户限制,请执行以下操作:
此设置确定任何用户的队列容量份额可以缩小到的最小限制。无论此限制如何,如果有空闲资源可用,任何用户都可以进入队列并占用超过其分配的份额。
下表显示了如何在用户将作业提交到最小用户限制百分比设置为 20% 的队列时调整队列资源:
Capacity Scheduler 的叶子队列还可以使用 user-limit-factor 属性来控制用户资源分配。此属性表示任何单个用户最多可以消耗的队列容量比例,无论集群中是否存在空闲资源。
根据本示例配置最大限制(user-limit-factor),请执行以下操作:
默认值“1”表示队列中的任何单个用户最多只能占用队列配置的容量。这可以防止单个队列中的用户独占集群中所有队列的资源。将该值设置为“2”会将队列的用户限制为队列配置容量的两倍。将其设置为 0.5 值将限制任何用户使用超过队列容量一半的资源。
为避免由于无法管理的负载(由恶意用户或意外引起)导致系统崩溃,容量调度程序使您能够对并发活动(正在运行和待处理)应用程序的总数设置静态、可配置的限制任何时候。
您可以使用最大应用程序队列属性设置最大应用程序限制属性。在任何特定队列中运行应用程序的限制是该总限制的一小部分,与其容量成正比。这是一个硬限制,这意味着一旦队列达到此限制,该队列的任何新应用程序都将被拒绝,客户端将不得不等待并稍后重试。
要在特定队列上设置应用程序限制 ( yarn.scheduler.capacity.<queue-path>.maximum-applications ),请执行以下操作:
Application Master (AM) 资源限制可用于设置专门分配给 Application Master 的集群资源的最大百分比。默认值为 10%,存在是为了避免跨应用程序死锁,其中集群中的重要资源完全被运行应用程序主控的容器占用。
此属性还间接控制集群中并发运行的应用程序数量,每个队列仅限于与其容量成比例的运行应用程序数量。
要为特定队列设置最大 Application Masters 资源限制 ( yarn.scheduler.capacity.maximum-am-resource-percent ):
使用访问控制列表 (ACL) 来控制用户和管理员对容量调度程序队列的访问权限。
应用程序提交实际上只能发生在叶队列级别,但是在父队列上设置的 ACL 限制将应用于其所有后代队列。
在容量调度程序中,通过使用提交应用程序 ACL参数授予对用户和组列表的队列访问权限来配置ACL。列表的格式是“user1,user2 group1,group2”——一个逗号分隔的用户列表,后跟一个空格,后跟一个逗号分隔的组列表。
注意
根队列的Submit Application ACL的默认值为yarn,这意味着只有默认yarn 用户才能向该队列提交应用程序。因此,要为特定用户和组提供对队列的访问权限,您必须将提交应用程序 ACL的值显式设置为这些用户和组。
值提交应用ACL(acl_submit_applications)也可以设置为“*”(星号),以允许访问所有的用户和组,也可以设置为“”(空格字符)阻止访问到所有用户和组。
如前所述,父队列上的 ACL 设置适用于其所有后代队列。因此,如果父队列使用“*”(星号)值(或未指定)允许访问所有用户和组,则其子队列不能限制访问。同样,在限制对子队列的访问之前,必须先将父队列设置为“”(空格字符)以阻止对所有用户和组的访问。
例如,以下属性会将根提交应用程序 ACL值设置为“”(空格字符)以阻止对所有用户和组的访问,并将对其子“support”队列的访问限制为用户“sherlock”和“john” ”和“cfo-group”组的成员:
每个子队列都通过配置属性绑定到其父队列。顶级的“支持”、“工程”和“营销”队列将绑定到“根”队列。
要基于此示例设置 ACL,请执行以下操作:
单独的 ACL 可用于控制各个级别的队列管理。队列管理员可以向队列提交应用程序,杀死队列中的应用程序,并获取有关队列中任何应用程序的信息(而普通用户被限制查看其他用户应用程序的所有详细信息)。
如果队列管理 ACL值设置为“ ”(空格字符),则会阻止对所有用户和组的访问。如果 ACL 设置为 sherlock,john cfo-group,则它允许访问用户“sherlock”和“john”以及“cfo-group”组的成员。
容量调度程序抢占允许较高优先级的应用程序抢占较低优先级的应用程序。
可能会发生这样的情况:队列具有保证级别的集群资源,但必须等待运行应用程序,因为其他队列正在使用所有可用资源。如果启用抢占,高优先级的应用程序不必等待,因为低优先级的应用程序已经占用了可用容量。启用抢占后,服务不足的队列几乎可以立即开始声明其分配的集群资源,而无需等待其他队列的应用程序完成运行。
注意
如果调度器配置中禁用抢占策略,则无法启用特定队列的抢占。有关设置调度程序级别抢占的信息,请参阅配置抢占。
您可以禁用特定队列的队列抢占(yarn.resourcemanager.scheduler.monitor.enable)。
队列内抢占防止队列中的资源不平衡。
队列内抢占有助于根据配置的用户限制或应用程序优先级在队列内有效分配资源。
注意
如果调度器配置中关闭了队列内抢占策略,则无法为特定队列开启队列内抢占。有关设置调度程序级别的队列内抢占的信息,请参阅配置队列内抢占。
禁用特定队列的队列内抢占(yarn.resourcemanager.monitor.capacity.preemption.intra-queue-preemption.enabled)
动态队列是根据动态放置规则的预定义表达式自动创建的。
动态创建的叶队列的队列名称旁边将显示一个叶图标。您可以在队列属性的动态自动创建队列部分查看动态创建的叶队列 的队列属性。您可以通过单击其托管父队列的Edit Child Queues选项来配置动态叶队列属性,例如设置用户限制、ACL、排序策略。在托管父队列级别设置的队列属性将应用于其所有叶队列。
根据您的要求在容量调度程序中设置 FIFO(先进先出)或公平调度策略。
容量调度程序中的默认排序策略是 FIFO(先进先出)。FIFO 通常适用于可预测的重复批处理作业,但有时不适用于按需或探索性工作负载。对于这些类型的工作,公平调度通常是更好的选择。灵活的调度策略使您能够在每个队列的基础上为不同类型的工作负载分配 FIFO 或公平排序策略。
FIFO(先进先出)和公平调度策略在批处理作业和临时作业中的工作方式不同。
批处理示例
在下面的示例中,两个队列具有相同的可用资源。一种使用 FIFO 排序策略,另一种使用公平共享策略。用户一个接一个地向每个队列提交三个作业,等待每个作业开始的时间刚好足够。第一个作业使用队列中资源限制的 6 倍,第二个 4 倍,最后一个 2 倍。
Ad Hoc Plus 批处理示例
在此示例中,正在运行使用 10 倍队列资源的作业。作业完成一半后,同一个用户开始第二个作业,需要 1 倍的队列资源。
您可以将队列排序策略的属性 ( yarn.scheduler.capacity.<queue-path>.ordering-policy ) 配置为 FIFO 或 Fair。默认设置为先进先出。
原文链接:https://docs.cloudera.com/cdp-private-cloud-base/latest/yarn-allocate-resources/topics/yarn-configure-queue-properties.html
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有