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

Ama*_*ose 1 hadoop mapreduce job-scheduling

我们可以在同一个hadoop集群中同时使用Fair调度程序和Capacity Scheduler.哪种调度程序是好的和有效的.谁能帮我 ?

Ama*_*mar 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现在支持这两种类型的调度.更多详细信息可在以下链接中找到: