Hadoop 的三种调度器FIFO、Capacity Scheduler、Fair Scheduler

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hfweather/article/details/82500067

     目前Hadoop有三种比较流行的资源调度器:FIFO 、Capacity Scheduler、Fair Scheduler。目前hadoop2.7默认使用的是Capacity Scheduler容量调度器。

一、FIFO(先入先出调度器)

hadoop1.x使用的默认调度器就是FIFO。FIFO采用队列方式将一个一个job任务按照时间先后顺序进行服务。比如排在最前面的job需要若干maptask和若干reducetask,当发现有空闲的服务器节点就分配给这个job,直到job执行完毕。

二、Capacity Scheduler(容量调度器)

hadoop2.x使用的默认调度器是Capacity Scheduler。

1、支持多个队列,每个队列可配置一定量的资源,每个采用FIFO的方式调度。

2、为了防止同一个用户的job任务独占队列中的资源,调度器会对同一用户提交的job任务所占资源进行限制。

3、分配新的job任务时,首先计算每个队列中正在运行task个数与其队列应该分配的资源量做比值,然后选择比值最小的队列。比如如图队列A15个task,20%资源量,那么就是15%0.2=70,队列B是25%0.5=50 ,队列C是25%0.3=80.33 。所以选择最小值队列B。

4、其次,按照job任务的优先级和时间顺序,同时要考虑到用户的资源量和内存的限制,对队列中的job任务进行排序执行。

5、多个队列同时按照任务队列内的先后顺序一次执行。例如下图中job11、job21、job31分别在各自队列中顺序比较靠前,三个任务就同时执行。

三、Fair Scheduler(公平调度器)

1、支持多个队列,每个队列可以配置一定的资源,每个队列中的job任务公平共享其所在队列的所有资源。

2、队列中的job任务都是按照优先级分配资源,优先级越高分配的资源越多,但是为了确保公平每个job任务都会分配到资源。优先级是根据每个job任务的理想获取资源量减去实际获取资源量的差值决定的,差值越大优先级越高。

猜你喜欢

转载自blog.csdn.net/hfweather/article/details/82500067