目前Hadoop有三種比較流行的資源調度器:FIFO 、Capacity Scheduler、Fair Scheduler。目前Hadoop2.7默認使用的是Capacity Scheduler容量調度器。服務器
1、FIFO(先入先出調度器)oop
Hadoop1.x使用的默認調度器就是FIFO。FIFO採用隊列方式將一個一個job任務按照時間前後順序進行服務。好比排在最前面的job須要若干maptask和若干reducetask,當發現有空閒的服務器節點就分配給這個job,直到job執行完畢。spa
2、Capacity Scheduler(容量調度器)3d
Hadoop2.x使用的默認調度器是Capacity Scheduler。blog
一、支持多個隊列,每一個隊列可配置必定量的資源,每一個採用FIFO的方式調度。排序
二、爲了防止同一個用戶的job任務獨佔隊列中的資源,調度器會對同一用戶提交的job任務所佔資源進行限制。隊列
三、分配新的job任務時,首先計算每一個隊列中正在運行task個數與其隊列應該分配的資源量作比值,而後選擇比值最小的隊列。好比如圖隊列A 15個task,20%資源量,那麼就是15%0.2=70,隊列B是25%0.5=50 ,隊列C是25%0.3=80.33 。因此選擇最小值隊列B。內存
四、其次,按照job任務的優先級和時間順序,同時要考慮到用戶的資源量和內存的限制,對隊列中的job任務進行排序執行。ci
五、多個隊列同時按照任務隊列內的前後順序一次執行。例以下圖中job十一、job2一、job31分別在各自隊列中順序比較靠前,三個任務就同時執行。資源
3、Fair Scheduler(公平調度器)
一、支持多個隊列,每一個隊列能夠配置必定的資源,每一個隊列中的job任務公平共享其所在隊列的全部資源。
二、隊列中的job任務都是按照優先級分配資源,優先級越高分配的資源越多,可是爲了確保公平每一個job任務都會分配到資源。優先級是根據每一個job任務的理想獲取資源量減去實際獲取資源量的差值決定的,差值越大優先級越高。