YARN的CapacityScheduler和FairScheduler调度器

1. 调度器概述

所述CapacityScheduler被设计成在操作员友好的方式运行的应用程序的Hadoop作为共享,多租户簇同时最大化吞吐量和集群的利用率。

传统上,每个组织都拥有自己的一组私有计算资源,这些计算资源具有足够的容量来满足组织在峰值或接近峰值条件下的SLA(Service-Level Aggrement)。这通常会导致较差的平均利用率和管理多个独立集群的开销,每个组织一个集群。在组织之间共享群集是运行大型Hadoop安装的一种经济有效的方式,因为这样可以在不创建私有群集的情况下获得规模经济效益。但是组织会不太想要群集被共享,因为他们担心其他人使用对其SLA至关重要的资源。

2. CapacityScheduler,基于(计算、存储等)能力的调度器

CapacityScheduler提供了一组严格的限制,以确保单应用程序或单用户或单队列无法消耗集群中的大量资源。此外,CapacityScheduler还限制单个用户或单个队列去初始化和挂起应用程序,以确保集群的公平性和稳定性。

为了提供对资源共享的进一步控制和可预测性,CapacityScheduler支持分层队列,以确保在允许其他队列使用空闲资源之前,组织的子队列之间能够先共享使用资源,即资源与自身所属组织的亲和度较高。

CapacityScheduler支持以下功能:

2.1分层队列

支持队列层次结构,以确保在允许其他队列使用空闲资源之前,在组织的子队列之间可以先进行资源共享,从而提供更多控制和可预测性。

2.2 Capacity的保证

队列被分配了整个Capacity中的一小部分,意味着队列能够支配这一部分的资源。提交到队列的所有应用程序都可以访问分配给队列的Capacity。管理员可以为分配给每个队列的Capacity配置软限制和可选硬限制。

2.3 安全性

每个队列都有严格的ACL(Access Control List),用于控制哪些用户可以将应用程序提交到哪个队列。此外,还有安全保护措施可确保用户无法查看或修改其他用户的应用程序。此外,还支持队列和系统的管理员角色。

2.4 弹性

空闲资源可以被分配给任何超出自己Capacity的队列(也是Capacity不足)。如果将来某个时间点原先给出资源的队列的Capacity不足,需要这些资源,随着调度到这些资源上的任务完成,这些资源将被分配给运行在Capacity不足的队列上的应用程序。(也支持抢占)。这确保了资源以可预测和弹性的方式用于队列,从而防止集群中的 资源孤岛 ,有助于提高利用率。

2.5 多租户

提供全面的限制,以防止单个应用程序,用户和队列独占整个队列或集群资源,以确保集群不会被淹没。

2.6 可操作性

2.6.1 运行时配置

管理员可以在运行时以安全的方式更改队列定义和属性(如容量,ACL),以最大限度地减少对用户的干扰。此外,还为用户和管理员提供了一个控制台,以查看系统中各种队列的当前资源分配。管理员可以在运行时添加其他队列,但不能在运行时删除队列。

2.6.2 停止应用程序

管理员可以在运行时停止队列,以确保在现有应用程序运行完成时,不能提交新的应用程序。如果队列处于STOPPED状态,则无法将新应用程序提交给自身或其任何子队列。现有应用程序继续完成,因此可以 优雅地停止 队列。管理员还可以启动已停止的队列。

2.7 基于资源的调度

支持资源密集型应用程序,其中应用程序可以选择指定比默认值更高的资源要求,从而适应具有不同资源要求的应用程序。目前,内存是支持的资源需求。

2.8 基于用户或组的队列映射

此功能允许用户根据用户或组将作业映射到特定队列。

2.9 优先级调度

此功能允许以不同的优先级提交和调度应用程序。较高的整数值表示应用程序的优先级较高。目前,只有FIFO排序策略支持应用程序优先级。

3. FairScheduler,公平调度器

公平调度是一种为应用程序分配资源的方法,使得所有应用程序可以随时间平均地获得相等的资源份额。默认情况下,公平调度程序仅基于内存来确定调度公平性决策。它可以配置为使用Dominant Resource Fairness的概念同时调度内存和CPU。当只有一个应用程序在运行时,该应用程序将使用整个群集。当提交其他应用程序时,将释放的资源分配给新应用程序,以便最终每个应用程序获得的资源大致相同。与默认Hadoop调度程序不同,默认的Hadoop调度程序的队列是由应用程序排队,FairScheduler能够使得让小应用程序在可以在合理的时间内完成,同时不会使应用程序因为排队过久而饥饿。它也是在多个用户之间共享群集的合理方式。最后,公平共享还可以与应用优先级一起使用,将优先级作为权重来确定每个应用应获得的总资源的比例

3.1 指定队列

调度程序将应用程序组织为队列,并在这些队列之间公平地共享资源。默认情况下,所有用户共享一个名为default的队列。如果应用程序在容器资源请求中指定了某个队列,则将请求提交给该队列。还可以通过配置基于请求中包含的用户名来分配队列。在每个队列中,调度策略用于在正在运行的应用程序之间共享资源。默认值是基于内存的公平共享,但也可以配置Dominant Resource Fairness的FIFO和多资源。可以按层次结构排列队列以划分资源,并使用权重配置以按特定比例共享群集。

3.2 最小份额

除了提供公平共享之外,Fair Scheduler还允许为队列分配保证的最小份额,这能确保某些用户,组或生产应用程序始终获得足够的资源。当队列包含应用程序时,它至少获得其最小份额,但是当队列不需要其完全保证共享时,超出部分将在其他正在运行的应用程序之间分配。这使得调度程序可以保证队列的Capacity,同时在这些队列没有应用程序排队时有效地利用资源。

3.3 限制running态应用程序的并发数量

Fair Scheduler允许所有应用程序默认运行,但也可以通过配置文件限制每个用户和每个队列运行的应用程序数量。当用户必须一次提交数百个应用程序,或者只是想在运行太多应用程序的的时候提升一下性能,这通常很有用。因为如果同时运行太多应用程序会导致创建过多的中间数据或过多的上下文切换。限制应用程序不会导致任何后续提交的应用程序失败,只会在调度程序的队列中等待,直到某些用户的早期应用程序完成为止。

3.4 可插拔的分层队列

公平调度程序支持分层队列。所有队列都来自root的队列。可用资源以典型的公平调度方式分布在根队列的子节点之间。然后,孩子们以相同的方式将分配给他们的资源分配给他们的孩子。应用程序只能安排在叶子队列上。通过修改调度器分配文件,可以将某些队列放在另一些队列的子元素中,从而使这些队列指定为另一些队列的子队列。

3.4.1 队列命名方式

队列的名称以其父项的名称开头,句点为分隔符。因此,根队列下名为queue1的队列将被称为root.queue1。根队列下名为parent1的队列中名为queue2的队列将被称为root.parent1.queue2。当引用队列时,名称的根部分是省略的,因此queue1可以被称为queue1,而queue2可以被称为parent1.queue2。

3.4.2 自定义调度策略

此外,公平调度程序允许为每个队列设置不同的自定义策略,以允许以用户想要的任何方式共享队列的资源。可以通过继承org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.SchedulingPolicy来构建自定义策略。FifoPolicy,FairSharePolicy(默认调度程序)和DominantResourceFairnessPolicy是内置的,可以很容易地使用。

Hadoop2.x版本的FairScheduler尚未支持Hadoop1.x的FairScheduler的某些加载项。其中,包括使用自定义策略管理优先级从而提升某些应用程序的执行顺序。

3.5 应用程序自动入队

Fair Scheduler允许管理员配置自动将提交的应用程序放入适当队列的策略。放置可以取决于提交者的用户和组以及应用程序传递的请求队列。策略由一组规则组成,这些规则按顺序应用以对传入的应用程序进行分类。每个规则要么将应用程序放入队列,要么拒绝它,要么继续执行下一个规则。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值