目前Hadoop有三种比较流行的资源调度器:FIFO、Capacity Scheduier、Fair Scheduler。目前Hadoop2.7默认使用的是 Capacity Scheduler容量调度器。
目录
1.FIFO(先入先出调度器)
?
2.Capacity Scheduler(容量调度器)
1.2.14.3 Fair Scheduler(公平调度器)
1.FIFO(先入先出调度器)
Hadoop1.x使用的默认调度器就是FIFO。FIFO采用队列方式将一个一个job任务按照时间先后顺序进行服务。比如排在最前面的job需要若干maptask和若干reducetask,当发现有空闲的服务器节点就分配给这个job,直到job执行完毕。
2.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分别在各自队列中顺序比较靠前,三个任务就同时执行。
1.2.14.3 Fair Scheduler(公平调度器)
1.持多个队列,每个队列可以配置一定的资源,每个队列中的job任务公平共享其所在队列的所有资源。
2.队列中的job任务都是按照优先级分配资源,优先级越高分配的资源越多,但是为了确保公平每个job任务都会分配到资源。优先级是根据每个 job任务的理想获取资源量减去实际获取资源量的差值决定的,差值越大优先级越高。