调度器(scheduler)是Yarn中ResourceManager中的可插拔的资源调度器。所以它只管给任务分配资源,不管其他的事情。
①先进先出调度器(FIFO Scheduler)
Hadoop中默认的调度器,按照到达时间的先后选择被执行的任务。
先进先出,同一时间队列中只有一个任务在执行。
②容量调度器(Capacity Scheduler)
Hadoop2.x之后默认的调度器是Capacity Scheduler
容量调度器,多队列的方式。以队列为单位划分资源,每个队列可设定一定比例的资源最低保证和使用上限。每个队列内部采用FIFO的调度策略。
调度过程:当job提交后大致由如下过程
1)为job选择队列,通过计算队列资源使用率,选择"最闲的"队列
2)将队列中的job按照提交时间排序,选择最早的Application分配资源
一个队列中同时只能有一个job执行,队列并行度等于队列的个数,允许并行运行
③公平调度器(Fair scheduler)
公平调度器,多队列的方式,以队列为单位划分资源。每个队列中的job任务公平共享其所在队列的所有资源。
其实这里有个误区,这里的公平共享不是指每个job分到的资源是一样的,只是说会有另外的资源分配策略保证每个job都会分到资源以确保公平
队列中的job任务都是按照优先级分配资源,优先级越高分配的资源越多,但是为了确保公平每个job任务都会分配到资源。优先级是根据每个job任务的理想获取资源量减去实际获取资源量的差值决定的,差值越大优先级越高。