文章目录
- 1. YARN总述
- 2. YARN调度器
- 2.1 FIFO Scheduler
- 2.2 Capacity Scheduler
- 2.3 Fair Scheduler
1. YARN总述
YARN是Hadoop资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。如上图所示,从Hadoop2开始,官方把资源管理单独剥离出来,主要是为了考虑后期作为一个公共的资源管理平台,任何满足规则的计算引擎都可以在它上面执行。YARN可以实现HADOOP集群的资源共享,不仅仅可以跑MapRedcue,还可以跑Spark、Flink。
YARN主要负责集群资源的管理和调度 ,支持主从架构,主节点最多可以有2个,从节点可以有多个。其主节点称为ResourceManager,主要负责集群资源的分配和管理;从节点称为NodeManager,主要负责当前机器资源管理。
YARN主要管理内存和CPU这两种资源类型。当NodeManager节点启动的时候自动向ResourceManager注册,将当前节点上的可用CPU信息和内存信息注册上去,所有的NodeManager注册完成以后,ResourceManager就知道目前集群的资源总量了。
2. YARN调度器
YARN是做资源管理调度的,它一共有三种调度器,分别是:
- FIFO Scheduler:先进先出(first in, first out)调度策略;
- Capacity Scheduler:FIFO Scheduler的多队列版本;
- Fair Scheduler:多队列,多用户共享资源。
2.1 FIFO Scheduler
FIFO Scheduler是先进先出的,类似于数据结构中的队列,如果你的任务申请不到足够的资源,那就得等待,等前面的任务执行结束释放了资源之后再执行。这种调度机制在有些时候是不合理的,因为一些任务的优先级比较高,提交上去立刻就应该开始执行,这种机制就实现不了。
2.2 Capacity Scheduler
Capacity Scheduler是FIFO Scheduler的多队列版本,它先把集群中的整块资源划分成多份,可以人为的给这些资源定义使用场景,例如图中queue A中运行普通的任务,queue B中运行优先级较高的任务。这两个队列的资源是相互独立的,而且各队列内部还是按照先进先出的规则进行。
在实际工作中一般都是使用这种调度器( CapacityScheduler)。从Hadoop2开始,Capacity Scheduler为集群中的默认调度器。
2.3 Fair Scheduler
Fair Scheduler支持多个队列,每个队列可以配置一定的资源,每个队列中的任务共享其所在队列的所有资源,不需要排队等待资源。假设我们向一个队列中提交了一个任务,这个任务刚开始会占用整个队列的资源,当再提交第二个任务的时候,第一个任务会把他的资源释放出来一部分给第二个任务使用,两者在这段时间是并行执行的。