我们可以在同一个hadoop集群中同时使用公平调度器和容量调度器吗?哪个调度程序好且有效。谁能帮我 ?
1 回答
我认为两者不能同时使用。这也没有意义。为什么要在同一个集群中同时使用这两种调度方式?由于特定的用例,两种调度算法都出现了。
公平调度是一种将资源分配给作业的方法,以便所有作业平均随着时间的推移获得同等份额的资源。当有一个作业在运行时,该作业会使用整个集群。当提交其他作业时,将释放的任务槽分配给新作业,以便每个作业获得大致相同的 CPU 时间。与形成作业队列的默认 Hadoop 调度程序不同,这可以让短作业在合理的时间内完成,而不会饿死长作业。在多个用户之间共享集群也是一种合理的方式。最后,公平共享也可以与作业优先级一起使用——优先级用作权重来确定每个作业应该获得的总计算时间的比例。
Fair Scheduler 源于 Facebook 需要在多个用户之间共享其数据仓库。Facebook 开始使用 Hadoop 来管理其每天积累的大量内容和日志数据。最初,每天只有少数工作需要在数据上运行以构建报告。然而,随着 Facebook 内的其他团队开始使用 Hadoop,生产工作的数量增加了。此外,分析师开始使用数据仓库通过 Hive(Facebook 的类似 SQL 的 Hadoop 查询语言)进行临时查询,并且随着开发人员对数据集进行试验,提交了更多的大型批处理作业。Facebook 的数据团队考虑为生产作业构建一个单独的集群,但认为这将非常昂贵,因为必须复制数据并且两个集群的利用率都会很低。反而,Facebook 构建了 Fair Scheduler,它可以在多个作业之间平均分配资源,并且还支持生产作业的容量保证。Fair Scheduler 基于三个概念:
- 根据可配置属性(例如用户名、Unix 组)或通过其 jobconf 将作业明确标记为位于特定池中,作业被放置到命名的“池”中。
- 每个池都可以具有通过配置文件指定的“保证容量”,该文件提供了分配给池的最小数量的映射槽和减少槽。当池中有待处理的作业时,它至少会获得这么多槽,但如果它没有作业,则这些槽可以被其他池使用。
- 未达到池最小值的多余容量将使用公平共享在作业之间分配。公平共享可确保随着时间的推移,每个作业都会收到大致相同数量的资源。这意味着较短的工作将很快完成,而较长的工作则保证不会饿死。
调度程序还包括许多易于管理的功能,包括在运行时重新加载配置文件以更改池设置而无需重新启动集群、限制每个用户和每个池运行的作业以及使用优先级来权衡份额的不同工作。
CapacityScheduler 旨在允许共享大型集群,同时为每个组织提供最低容量保证。中心思想是将 Hadoop Map-Reduce 集群中的可用资源分配给多个组织,这些组织根据计算需求共同为集群提供资金。还有一个额外的好处是,组织可以访问任何未被其他人使用的多余容量。这以具有成本效益的方式为组织提供了弹性。
Yahoo 的Capacity Scheduler 提供了与Fair Scheduler 类似的功能,但采用了一些不同的理念。在容量调度程序中,您定义了许多命名队列。每个队列都有可配置数量的 map 和 reduce 槽。调度程序在每个队列包含作业时为其分配容量,并在队列之间共享任何未使用的容量。但是,在每个队列中,都使用了具有优先级的 FIFO 调度,除了一个方面 - 您可以限制每个用户运行任务的百分比,以便用户平等地共享集群。换句话说,容量调度器试图为每个用户和每个组织模拟一个单独的 FIFO/优先级集群,而不是在所有作业之间执行公平共享。
因此,它可以归结为您的需求和设置,以便决定您应该使用哪个调度程序。
Apache hadoop 现在支持这两种类型的调度。更详细的信息可以在以下链接中找到: