2012-12-12 25 views

回答

5

我不认为两者都可以同时使用。这也没有意义。你为什么要在同一个集群中使用两种类型的调度?由于具体的使用情况,两个调度算法都出现了。

公平调度是一种为作业分配资源的方法,这样所有作业平均得到的资源的平均份额随时间变化。当 有一个作业正在运行时,该作业将使用整个群集。当提交其他作业 时,空闲的任务插槽将分配给 新作业,以便每个作业获得大致相同的CPU时间量。 与构成作业队列的默认Hadoop计划程序不同,此 可让短时间作业在合理的时间内完成,而不会损坏长时间的 作业。在用户数 之间共享群集也是一种合理的方式。最后,公平分享也可以与工作优先级一起工作 - 优先级被用作权重来确定每个工作应得到的计算时间总和的比例。

公平调度程序产生Facebook的需要在多个用户之间共享其数据仓库。 Facebook开始使用Hadoop来管理每天累积的大量内容和日志数据。最初,每天需要运行数据才能创建报告。然而,随着Facebook内的其他团体开始使用Hadoop,生产工作的数量也在增加。此外,分析师开始使用数据仓库通过Hive(面向Hadoop的Facebook类SQL查询语言)进行临时查询,并且在开发人员尝试使用该数据集时提交了更多的大批量作业。 Facebook的数据团队考虑为生产任务构建一个单独的群集,但看到这将非常昂贵,因为数据将不得不被复制,并且两个群集的利用率都很低。相反,Facebook构建了Fair Scheduler,它在多个作业之间平均分配资源,并且还支持生产作业的容量保证。公平调度器是基于三个概念:

  • 作业被放置到基于可配置的属性命名为“池” 如用户名,UNIX组或明确标注一份工作,通过一个特定的池是 它的jobconf。
  • 每个池都可以有一个“保证容量”,通过 指定一个配置文件,该配置文件给出了最少数量的映射插槽并减少了要分配给池的插槽。当 池中存在挂起的作业时,它至少会获得多个插槽,但如果它没有作业,则其他池可以使用 插槽。
  • 未达到池最低限度的剩余容量是 在使用公平共享的作业之间分配。公平分享确保随着时间的推移,每个作业都会获得大致相同的资源量。 这意味着较短的工作会很快完成,而较长的工作 保证不会饿死。

调度还包括用于简化管理的多项功能,包括重新加载配置文件在运行时更改池设置,而无需重新启动群集上运行的每个用户和每个池的工作范围的能力,并使用优先权衡量不同工作的份额。


的CapacityScheduler被设计为允许共享一大簇 同时也让每一个组织的最小容量保证。中心思想是Hadoop Map-Reduce集群中的可用资源在多个组织之间进行分区,这些组织根据计算需要共同为集群提供资金。还有一个额外的好处 ,组织可以访问任何多余的容量不被 其他人使用。这为组织提供了具有弹性的 具有成本效益的方式。

Yahoo的容量调度程序提供了与公平调度程序类似的功能,但采用了一种有点不同的理念。在Capacity Scheduler中,您可以定义一些命名队列。每个队列都有一个可配置数量的映射和减少插槽。调度程序在包含作业时向每个队列提供其容量,并在队列之间共享任何未使用的容量。但是,在每个队列中,使用具有优先级的FIFO调度,除了一个方面 - 您可以限制每个用户正在运行的任务的百分比,以便用户平等地共享一个群集。换句话说,容量调度器试图为每个用户和每个组织模拟一个单独的FIFO /优先级集群,而不是在所有作业之间进行公平分享。容量调度程序还支持在每个队列上配置等待时间,在此之后,如果其他队列的任务低于其公平份额,则允许其抢占其他队列的任务。

因此,它会归结为什么是你的需要和设置,以决定你应该与哪个调度程序。

Apache hadoop现在支持这两种类型的调度。自80年代末至少 -

+0

Fairshare调度已在HPC中使用Facebook的创建没过多久:更详细的信息,可以在下面的链接中找到。由于共享树存在,我认为会产生混淆(这个问题),它允许HPC中的fairshare系统提供Hadoop的容量调度程序的功能。 –

+0

我相信他指的是Hadoop项目中的公平份额调度。当然,这个概念可能在马克·祖克伯格出生之前就已经出现了。 – petersaints

相关问题