考虑有3个顶级队列,q1,q2,q3。能力调度器
q1和q2的用户将他们的作业提交到各自的队列,保证他们获得分配给他们的资源。现在没有被q3利用的资源被q1和q2利用了。纱线在分配额外资源时考虑哪些因素?谁(q1,q2)有优先权?
Capacity Scheduler中的每个队列都有2个重要属性(根据可用总资源的百分比定义),它们决定了调度:
- 队列的保证容量(由配置"yarn.scheduler.capacity.{queue-path}.capacity"决定)
- 队列可以增长的最大容量(由配置"yarn.scheduler.capacity.{queue-path}. Maximum -capacity"决定)。这对队列的资源利用率设置了上限。队列不能超过此限制。
Capacity Scheduler以分层方式组织队列。队列有两种类型"父"队列和"叶"队列。作业只能提交到叶子队列。
"ROOT"队列是所有其他队列的父队列。
每个父队列,根据需求对子队列进行排序(队列当前使用的容量是多少?)是供应不足还是供应过剩?)。
对于每个队列,比率(已用容量/总集群容量)给出了队列利用率的指示。父队列总是优先给服务最少的子队列。
当空闲资源被分配给父队列时,这些资源将根据当前队列的使用容量递归地分配给子队列。
在叶子队列中,容量的分配可以基于某些用户限制(例如配置参数:yarn.scheduler.capacity.{queue-path})。minimum-user-limit-percent,确定保证每个用户拥有的最小队列容量)。
在您的示例中,为了简单起见,让我们假设队列q1、q2和q3直接存在于"ROOT"下。如前所述,父队列根据使用情况对队列进行排序。
由于q3没有被利用,父节点可以将q3未被利用的资源分配到q1和q2之间。
可用资源按以下因素分配:
-
如果q1和q2都有足够的资源来继续调度它们的作业,那么就不需要从q3中分配可用的资源
-
如果q1和q2都达到了最大容量("yarn.scheduler.capacity.{queue-path}. "maximum-capacity",此配置限制了队列的弹性。队列不能要求超过该参数配置的百分比),则不分配空闲资源
-
如果队列q1或q2中的任何一个服务不足,则将空闲资源分配给服务不足的队列
-
如果q1和q2都服务不足,那么服务不足最多的队列将获得最高优先级。