關於Scheduler
YARN有四種調度機制:Fair Schedule,Capacity Schedule,FIFO以及Priority;
其中Fair Scheduler是資源池機制,進入到里面的應用是共享pool里面的資源;只有當資源配比發生緊張的時候,才會根據權重來進行調整;
Capacity則是基於隊列的,每個隊列都會被分配資源比例,這種資源比例是固定;所以沒有資源共享的概念
MapR,cloudera都是默認采用Fair Scheduler,Ambari(Hortonwork)默認使用Capacity Scheduler;
Fair Scheduler是一個池子的概念,就是來了一個應用就扔到這個池子里面,大家共享這個池子里面的資源;Fair Scheduler提供了一種Weigth的概念,就是比重,最后鬼根據比重來為各個池子分配資源(本質和Capacity里面的capacity一樣);同時她還提供了max resource,min resource的可選配置,就是制定資源下限和上限;這個屬性的配置是可以覆蓋weigth(權重)的。但是並不推薦使用max min資源配置,因為不夠靈活;
Capacity Scheduler是一個隊列概念,來了一個應用,如果發現資源不夠了,則根據FIFO規則排隊;什么時候資源夠了,再用。
Fair Scheduler可以配置自動創建pool,但是Capacity則無法創建隊列;其實本質差別就是在於一個是pool共享資源的概念(YARN-3319),一個是queue隊列形式利用資源。或者這么解釋,對於Faire而言,可以使用資源池中未被使用的資源,但是Capacity則不允許;所以前者比較靈活,后者相對古板。但是通過看到Capacity有計划也實現一版fairness appliction;如果真是這樣,那么兩者區別就變得很小了。
參考文章
https://people.csail.mit.edu/matei/talks/2009/hadoop_summit_fair_scheduler.pdf
https://www.quora.com/On-what-basis-do-I-decide-between-Fair-and-Capacity-Scheduler-in-YARN
https://www.quora.com/Apache-Hadoop-Whats-the-difference-between-Fair-Scheduler-and-Capacity-Scheduler
備注
我發現https://www.quora.com/是一個很牛逼的網站,在瀏覽關於YARN調度器差別的時候,發現回帖的都是apache里面的人!