Yarn 调度器和调度算法
YARN调度器(Scheduler)是负责将集群资源分配给不同应用程序的组件。它根据应用程序的资源需求和优先级,以及集群的资源供给情况,决定如何分配资源。YARN提供了多种调度器实现,每种调度器都有不同的调度算法和特点。
目前,Hadoop作业调度器主要有三种:FIFO
、容量(Capacity Scheduler
)和公平(Fair Scheduler
)。Apache Apache Hadoop3.1.3 默认的资源调度器是Capacity Scheduler。 CDH框架默认调度器是Fair Scheduler。
1. FIFO调度器 (First-In-First-Out Scheduler
):
- FIFO 调度器(First In First Out):单队列,根据提交作业的先后顺序,先来先服务,按照应用程序提交的顺序分配资源。
- 当一个应用程序提交后,FIFO调度器会尽快为其分配所需资源,并等待该应用程序执行完成后再分配下一个应用程序的资源。
- 这种调度器适用于简单的任务处理场景,但可能导致长作业等待时间过长,资源利用率较低。
2. 容量调度器 (Capacity Scheduler
):
- Capacity Scheduler 是 Yahoo 开发的多用户调度器。
- 容量调度器是YARN提供的一种多队列调度器,它将集群的资源划分为多个队列,每个队列都有自己的资源配额。
- 每个队列可以分配的资源由其配置的容量决定,但在集群资源未满时,队列可以使用其他队列的资源。
- 这种调度器适用于多个应用程序之间的资源共享和隔离场景,可以根据不同应用程序的优先级和需求进行灵活的资源分配。
- 容量调度器资源分配算法:
3. 公平调度器 (Fair Scheduler
):
- Fair Schedulere 是 Facebook 开发的多用户调度器。
- 公平调度器是一种基于公平分享资源的调度器,它将集群资源公平地分配给各个应用程序。公平调度器通过动态调整每个应用程序的资源配额,以确保每个应用程序都能获得公平的资源份额。
- 它支持多个应用程序同时运行,并可以根据应用程序的需求自动调整资源分配。公平调度器适用于资源共享场景,可以确保各个应用程序都能获得适当的资源,避免了长作业等待时间过长的问题。
-
Fair策略和DRF(Dominant Resource Fairness)策略都是公平调度器(Fair Scheduler)中常用的调度算法,它们旨在确保资源在集群中被公平地分配给各个应用程序。
Fair策略(Fair Sharing
):
Fair策略是最简单的公平调度算法之一,它的核心思想是将集群资源均匀地
分配给所有的应用程序。Fair策略主要包括以下几个步骤:
-
资源分配 :Fair策略根据当前集群中的资源情况,将资源均匀地分配给所有的应用程序 。每个应用程序都会被分配到一定比例的资源,以确保每个应用程序都能获得公平的资源份额。
-
动态调整 :Fair策略会动态地调整资源分配,以适应集群资源的变化和应用程序的需求变化 。当集群资源有剩余时,Fair策略会将剩余资源分配给需要资源的应用程序,以提高资源的利用率。
-
优先级支持 :Fair策略可以支持为不同的应用程序设置优先级 ,以确保高优先级的应用程序可以优先获得资源。
- Fair策略的优点是简单直观,能够实现资源的公平分配。
- 但是,它可能无法满足一些特定应用程序的需求,如长时间运行的作业可能会等待时间过长。
DRF策略(Dominant Resource Fairness):
DRF策略是一种更为复杂和高效的公平调度算法,它考虑了各个应用程序对集群中不同资源的需求,并尽量满足每个应用程序对其"主导资源"的需求 。DRF策略的核心思想是确保每个应用程序在其主导资源
上获得公平的份额。
DRF策略主要包括以下几个步骤:
-
主导资源计算 :DRF策略会根据每个应用程序的资源需求,计算出其在集群中的主导资源。主导资源通常是应用程序在资源利用上占比最大的资源,如内存、CPU等。
-
资源分配 :DRF策略会优先满足每个应用程序对其主导资源的需求,确保每个应用程序都能获得公平的主导资源份额。如果集群资源有剩余,则会根据次要资源(非主导资源)的需求来分配剩余资源。
-
资源调整 :DRF策略会动态调整资源分配,以适应集群资源的变化和应用程序的需求变化。它会根据每个应用程序的主导资源和次要资源的需求,优先满足主导资源的需求,然后再分配剩余资源。
- DRF策略的优点是能够更加精确地满足每个应用程序对资源的需求,提高了资源的利用率和集群的性能。
- 但是,DRF策略的实现比较复杂,计算成本较高。