1. 程式人生 > >YARN常用的3種排程器

YARN常用的3種排程器

參考連結:
http://blog.csdn.net/suifeng3051/article/details/49508261
http://www.cnblogs.com/BYRans/p/5567650.html
http://www.jianshu.com/p/7151ba6c5e03
叢集資源是非常有限的,在多使用者、多工環境下,需要有一個協調者,來保證在有限資源或業務約束下有序排程任務,YARN資源排程器就是這個協調者。目前在很多大資料平臺,例如hadoop,都是用YARN來協調資源使用。
1. FIFO Scheduler
FIFO Scheduler就是將應用按照提交的順序排成一個佇列,在資源分配時,先給佇列中對頭分配資源,等到對頭上的應用資源使用完後,在分配給佇列中的下一個。
缺點:

並不適用於共享叢集,大的應用可能會佔用所有叢集資源,這就導致其它應用被阻塞。
在共享叢集中,更適合採用Capacity SchedulerFair Scheduler,這兩個排程器都允許大任務和小任務在提交的同時獲得一定的系統資源。
2. Capacity Scheduler
Capacity 排程器允許多個組織共享整個叢集,每個組織可以獲得叢集的一部分計算能力。通過為每個組織分配專門的佇列,然後再為每個佇列分配一定的叢集資源,這樣整個叢集就可以通過設定多個佇列的方式給多個組織提供服務了。除此之外,佇列內部又可以垂直劃分,這樣一個組織內部的多個成員就可以共享這個佇列資源了,在一個佇列內部,資源的排程是採用的是先進先出(FIFO)策略。
在正常的操作中,Capacity排程器不會強制釋放Container,當一個佇列資源不夠用時,這個佇列只能獲得其它佇列釋放後的Container資源。當然,我們可以為佇列設定一個最大資源使用量,以免這個佇列過多的佔用空閒資源,導致其它佇列無法使用這些空閒資源,這就是”彈性佇列”需要權衡的地方。
3. Fair Scheduler
Fair排程器的設計目標是為所有的應用分配公平的資源(對公平的定義可以通過引數來設定)。舉個例子,假設有兩個使用者A和B,他們分別擁有一個佇列。當A啟動一個job而B沒有任務時,A會獲得全部叢集資源;當B啟動一個job後,A的job會繼續執行,不過一會兒之後兩個任務會各自獲得一半的叢集資源。如果此時B再啟動第二個job並且其它job還在執行,則它將會和B的第一個job共享B這個佇列的資源,也就是B的兩個job會用於四分之一的叢集資源,而A的job仍然用於叢集一半的資源,結果就是資源最終在兩個使用者之間平等的共享。