資源調度器是什麼?
Yarn中負責集羣資源分配的是Scheduler。
分成三種類型:FIFO Scheduler,Capacity Scheduler,Fair Scheduler。
FIFO Scheduler:先進先出隊列,任務先提交就會被先執行,優先滿足最先被提交的任務,之後若有空餘資源再分配給後續的任務。缺點是一個任務將集羣資源耗盡,其他任務就只能等待資源被釋放後才能繼續執行,否則一直被阻塞。即小任務會被大任務阻塞
Capacity Scheduler。Hadoop2.7.2默認的資源調度器。支持多個隊列,每個隊列是FIFO調度。
例如集羣的資源被分到了A,B兩個隊列中,
A隊列佔用60%的資源,B隊列佔用40%的資源。
root
------a[60%]
|---a.bi[40%]
|---a.realtime[60%]
------b[40%]
當用戶向a提交了一個任務,此任務可以佔用100%的集羣資源(集羣中僅此一個任務,沒有其他任務),當向b隊列提交了任務後,隊列a會慢慢地釋放佔用的資源,達到的平衡狀態是隊列a使用60%的資源運行一個任務,隊列b使用40%的資源運行一個任務。
特點:
- 層次化設計:子隊列可以使用父隊列的資源,這樣可以合理分配、限制資源。
- 容量設計:每個隊列/任務都不會用盡集羣資源,有任務資源閾值
Fair Scheduler,支持多隊列、多用戶,一個隊列的所有job都會得到執行,按照資源差額(隊列中已有的資源與任務需要的資源)來評定任務執行的優先級。