我们可以在同一个hadoop集群中同时使用Fair调度程序和Capacity Scheduler

时间:2012-12-12 14:48:53

标签: hadoop mapreduce job-scheduling

我们可以在同一个hadoop集群中同时使用Fair调度程序和Capacity Scheduler。哪种调度程序是好的和有效的。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:5)

我不认为两者可以同时使用。它也没有意义。为什么要在同一个集群中使用这两种类型的调度?由于特定的用例,两种调度算法都已出现。

  

公平调度是一种为工作分配资源的方法   平均而言,所有工作都会获得相同比例的资源。什么时候   有一个作业在运行,该作业使用整个集群。什么时候   提交其他作业,释放的任务槽分配给   新作业,以便每个作业获得大致相同的CPU时间。   与默认的Hadoop调度程序不同,它构成了一个作业队列,这个   让短期工作在合理的时间内完成,而不是长期挨饿   工作。这也是在数字之间共享群集的合理方式   用户最后,公平分享也可以与工作重点相关 -   优先级用作权重来确定总分数   计算每个工作应该得到的时间。

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

  • 根据可配置属性将作业放入命名的“池”中 例如用户名,Unix组,或者特别标记作业 通过其jobconf在特定的池中。
  • 每个池都可以具有指定的“保证容量” 配置文件,它提供最少数量的映射槽并减少 要分配给池的槽。当有待处理的工作时 池,它至少得到这么多的插槽,但如果它没有工作,那么 其他池可以使用插槽。
  • 没有达到游泳池最低限度的超额容量是 使用公平分享在工作之间分配。公平分享确保了 随着时间的推移,每个工作获得的资源大致相同。 这意味着较短的工作将很快完成,而更长的工作 保证不会饿死。

调度程序还包含许多易于管理的功能,包括能够在运行时重新加载配置文件以更改池设置而无需重新启动集群,限制每个用户和每个池运行的作业,以及使用优先级衡量不同工作的份额。


  

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

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

因此,它可以归结为您的需求和设置,以便决定您应该使用哪个调度程序。

Apache hadoop现在支持这两种类型的调度。更多详细信息可在以下链接中找到: