在 Hadoop 中,我们可以接收来自不同客户端的多个作业来执行。 Map-Reduce 框架用于在典型的 Hadoop 集群中并行执行多个任务,以快速处理大型数据集。这个 Map-Reduce 框架负责调度和监控 Hadoop 集群中不同客户端给出的任务。但是这种调度作业的方法是在Hadoop 2之前使用的。
现在在 Hadoop 2 中,我们有了 YARN(又一个资源谈判器)。在 YARN 中,我们有单独的守护进程,分别作为 Application Master、Node Manager 和 Resource Manager 执行作业调度、监控和资源管理。
这里,资源管理器是主守护进程,负责跟踪或提供集群内任何应用程序所需的资源,节点管理器是从守护进程,它监视和跟踪应用程序使用的资源并将反馈发送给资源管理器。
调度程序和应用程序管理器是资源管理器的两个主要组件。 YARN 中的 Scheduler 完全致力于调度作业,它无法跟踪应用程序的状态。根据所需资源,调度程序执行或者我们可以说调度作业。
Hadoop 中主要有 3 种类型的调度器:
- FIFO(先进先出)调度程序。
- 容量调度程序。
- 公平调度程序。
这些调度器实际上是一种算法,当我们收到来自不同客户端的请求时,我们使用它来调度 Hadoop 集群中的任务。
作业队列只不过是我们从各种客户端收到的各种任务的集合。任务在队列中可用,我们需要根据我们的要求安排此任务。
1. 先进先出调度器
顾名思义,先进先出,即先进先出,所以先来的任务或应用程序将首先得到服务。这是我们在 Hadoop 中使用的默认调度程序。任务被放置在一个队列中,任务按其提交顺序执行。在这种方法中,一旦作业被调度,就不允许干预。因此有时高优先级进程必须等待很长时间,因为在此方法中任务的优先级无关紧要。
优势:
- 无需配置
- 先到先得
- 执行简单
坏处:
- 任务的优先级不重要,所以高优先级的工作需要等待
- 不适合共享集群
2. 容量调度器
在容量调度器中,我们有多个作业队列来调度我们的任务。容量调度器允许多个占用者共享一个大型 Hadoop 集群。在每个作业队列对应的Capacity Schedular中,我们提供了一些槽或集群资源来进行作业操作。每个作业队列都有自己的插槽来执行其任务。如果我们只有在一个队列中执行任务,那么该队列的任务也可以访问其他队列的插槽,因为它们可以自由使用,并且当新任务进入某个其他队列时,作业会在自己的插槽中运行集群被替换为它自己的工作。
容量调度程序还提供了一个抽象级别,以了解哪个占用者正在使用更多的集群资源或插槽,以便单个用户或应用程序不会占用集群中不合适或不必要的插槽。容量调度主要包含根、父、叶三种队列,分别用于表示集群、组织或任何子组、申请提交。
优势:
- 最适合在 Hadoop 集群中处理多个客户端或优先作业
- 最大限度地提高 Hadoop 集群的吞吐量
坏处:
- 更复杂
- 不容易为每个人配置
3. 公平调度器
公平调度程序与容量调度程序非常相似。考虑到工作的优先级。在 Fair Scheduler 的帮助下,YARN 应用程序可以共享大型 Hadoop 集群中的资源,并且这些资源是动态维护的,因此不需要预先容量。资源以这样一种方式分布,即集群内的所有应用程序获得相同的时间量。 Fair Scheduler 根据内存进行调度决策,我们也可以将其配置为与 CPU 一起工作。
正如我们告诉您的,它类似于容量调度程序,但要注意的主要事情是,在公平调度程序中,每当同一队列中出现任何高优先级作业时,都会通过替换已经专用插槽中的某些部分来并行处理任务。
好处:
- 分配给每个应用程序的资源取决于其优先级。
- 它可以限制特定池或队列中的并发运行任务。
缺点:需要配置。