YRAN默認狀況下使用的是該調度器,即全部的應用程序都是按照提交的順序來執行的,這些應用程序都放在一個隊列中,只有在前面的一個任務執行完成以後,才能夠執行後面的任務,依次執行node
缺點:若是有某個任務執行時間較長的話,後面的任務都要處於等待狀態,這樣的話會形成資源的使用率不高;若是是多人共享集羣資源的話,缺點更是明顯apache
針對多用戶的調度,容量調度器採用的方法稍有不一樣。集羣由不少的隊列組成(相似於任務池),這些隊列多是層次結構的(所以,一個隊列多是另外一個隊列的子隊列),每一個隊列被分配有必定的容量。這一點於公平調度器相似,只不過在每一個隊列的內部,做業根據FIFO的方式(考慮優先級)調度。本質上,容量調度器容許用戶或組織(使用隊列自行定義)爲每一個用戶或組織模擬出一個使用FIFO調度策略的獨立MapReduce集羣。相比之下,公平調度器(實際上也支持做業池內的FIFO調度,使其相似於容量調度器)強制池內公平共享,使運行的做業共享池內的資源。併發
總結:容量調度器具備如下幾個特色app
一、集羣按照隊列爲單位劃分資源,這些隊列多是層次結構的負載均衡
二、能夠控制每一個隊列的最低保障資源和最高使用限制,最高使用限制是爲了防止該隊列佔用過多的空閒資源致使其餘的隊列資源緊張dom
三、能夠針對用戶設置每一個用戶的資源最高使用限制,防止該用戶濫用資源oop
四、在每一個隊列內部的做業調度是按照FIFO的方式調度的this
五、若是某個隊列的資源使用緊張,可是另外一個隊列的資源比較空閒,此時能夠將空閒的資源暫時借用,可是一旦被借用資源的隊列有新的任務提交以後,此時被借用出去的資源將會被釋放還回給原隊列spa
六、每個隊列都有嚴格的訪問控制,只有那些被受權了的用戶才能夠查看任務的運行狀態。code
配置文件的說明(capacity-scheduler.xml):
<configuration> <property>
<!--集羣中容許運行和排隊的最大的應用程序數量,若是若是提交的任務超過這個數量的話,那麼多餘的任務將不會被MR接受--> <name>yarn.scheduler.capacity.maximum-applications</name> <value>10000</value> <description> Maximum number of applications that can be pending and running. </description> </property>
<!--集羣中容許運行ApplicationMater的資源百分比,控制併發運行應用程序的數量--> <property> <name>yarn.scheduler.capacity.maximum-am-resource-percent</name> <value>0.1</value> <description> Maximum percent of resources in the cluster which can be used to run application masters i.e. controls number of concurrent running applications. </description> </property>
<!--將用於比較調度程序中的資源的ResourceCalculator實現,默認是在只使用內存的時候進行資源比較--> <property> <name>yarn.scheduler.capacity.resource-calculator</name> <value>org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator</value> <description> The ResourceCalculator implementation to be used to compare Resources in the scheduler. The default i.e. DefaultResourceCalculator only uses Memory while DominantResourceCalculator uses dominant-resource to compare multi-dimensional resources such as Memory, CPU etc. </description> </property>
<!--指定root下的全部的隊列,用逗號進行分割--> <property> <name>yarn.scheduler.capacity.root.queues</name> <value>default</value> <description> The queues at the this level (root is the root queue). </description> </property>
<!--指定default下的全部隊列,依次類推-->
<property>
<name>yarn.scheduler.capacity.root.user1.queues</name>
<value>usera,userb,userc</value>
</property>
<!--指定默認default用戶使用的資源百分比,由於這裏root下只有default一個用戶,因此使用了所有的資源--> <property> <name>yarn.scheduler.capacity.root.default.capacity</name> <value>100</value> <description>Default queue target capacity.</description> </property>
<!--限制default下的具體的每一個用戶可使用的最多的資源百分比,用小數表示,1說明是百分百--> <property> <name>yarn.scheduler.capacity.root.default.user-limit-factor</name> <value>1</value> <description> Default queue user limit a percentage from 0.0 to 1.0. </description> </property>
<!--限制default用戶最多能夠獲得集羣總資源的百分比,這裏只有一個用戶,因此爲百分百--> <property> <name>yarn.scheduler.capacity.root.default.maximum-capacity</name> <value>100</value> <description> The maximum capacity of the default queue. </description> </property>
<!--隊列狀態:若是一個隊列的狀態是STOPPED,則不能向其提交應用程序或子隊列提交應用程序--> <property> <name>yarn.scheduler.capacity.root.default.state</name> <value>RUNNING</value> <description> The state of the default queue. State can be one of RUNNING or STOPPED. </description> </property>
<!--限定那些用戶或者是用戶組能夠給給定的隊列提交應用程序--> <property> <name>yarn.scheduler.capacity.root.default.acl_submit_applications</name>
<value>*</value> <description>
The ACL of who can submit jobs to the default queue. </description> </property> <property> <name>yarn.scheduler.capacity.root.default.acl_administer_queue</name> <value>*</value> <description> The ACL of who can administer jobs on the default queue. </description> </property> <property> <name>yarn.scheduler.capacity.node-locality-delay</name> <value>40</value> <description> Number of missed scheduling opportunities after which the CapacityScheduler attempts to schedule rack-local containers. Typically this should be set to number of nodes in the cluster, By default is setting approximately number of nodes in one rack which is 40. </description> </property> </configuration>
所謂的公平調度器指的是,旨在讓每一個用戶公平的共享集羣的能力。若是是隻有一個做業在運行的話,就會獲得集羣中全部的資源。隨着提交的做業愈來愈多,限制的任務槽會以「讓每一個用戶公平共享集羣」這種方式進行分配。某個用戶的好事短的做業將在合理的時間內完成,即使另外一個用戶的長時間做業正在運行並且還在運行過程當中。
做業都是放在做業池中的,默認狀況下,每一個用戶都有本身的做業池。提交做業數較多的用戶,不會所以而得到更多的集羣資源。能夠用map和reduce的任務槽數來定製做業池的最小容量,也能夠設置每一個池的權重。
公平調度器支持搶佔機制。因此,若是一個池在特定的一段時間內未能公平的共享資源,就會終止運行池中獲得過多的資源的任務,把空出來的任務槽讓給運行資源不足的做業池。
主要特色:
一、也是將集羣的資源以隊列爲單位進行劃分,稱爲隊列池
二、每一個用戶都有本身的隊列池,若是該隊列池中只有一個任務的話,則該任務會使用該池中的全部資源
三、每一個用戶提交做業都是提交到本身的隊列池中,因此,提交做業數較多的用戶,並不會所以而得到更多的集羣資源
四、支持搶佔機制。也就是說若是一個吃在特定的時間內未能公平的共享資源,就會終止池中佔用過多資源的任務,將空出來的任務槽讓給運行資源不足的做業池。
五、負載均衡:提供一個基於任務數目的負載均衡機制。該機制儘量的將任務均勻的分配到集羣的全部的節點上。