1. 程式人生 > >MapReduce作業調度

MapReduce作業調度

加米谷大數據 加米谷 MapReduce作業調度 大數據培訓

可以通過設置mapred.job.priority屬性或JobClient的setJobPriority()方法來設置優先級(在這兩種方法中,可以選VERY_HIGH,HIGH,NORMAL,LOW,VERY_LOW中的任何值作為優先級)。在作業調度器選擇要運行的下一個作業時,選擇的是優先級最高的作業。然而,在FIFO調度算法中,優先級並不支持搶占,所以高優先級的作業任然受阻於此前已經開始的,長時間運行的低優先級的作業。MR1的默認調度器是最初基於隊列的FIFO調度器,還有兩個多用戶調度器,分別為公平調度器和容量調度器。
技術分享圖片

01、公平調度器

公平調度器的目標是讓每個用戶公平共享集群能力。如果只有一個作業在運行,就會得到集群的所有資源。隨著提交的作業越來越多,閑置的任務槽會以“讓每個用戶公平共享集群”這種方式進行分配。某個用戶的耗時短的作業將在合理的時間內完成,即便另一個用戶的長時間作業正在運行而且還在運行過程中。 作業都放在作業池中,在默認情況下,每個用戶都有自己的作業池。提交作業數較多的用戶,不會因此而獲得更多的集群資源。可以用map和reduce的任務槽數來定制作業池的最小容量,也可以設置每個池的權重。 公平調度器支持搶占機制,所以,如果一個池在特定的一段時間內未能公平共享資源,就會中止運行池中得到過多資源的任務,把空出來的任務槽讓給運行資源不足的作業池。 公平調度器是一個後續模塊。要使用它,需要將其JAR文件放在HADOOP的類路徑,即將它從Hadoop的contrib/fairscheduler目錄復制到lib目錄。隨後,像下面這樣設置mapred.jobtracker.taskScheduler屬性: org.apache.hadoop.mapred.FairScheduler

02、容量調度器

集群由很多隊列組成(類似於公平調度器的任務池),這些隊列可能是層次結構的(因此,一個隊列可能是另一個隊列的子隊列),每個隊列被分配有一定的容量。這一點與公平調度器類似,只不過在每個隊列內部,作業根據FIFO方式(考慮優先級)進行調度。本質上,容量調度器允許用戶或組織(使用隊列進行定義)為每個用戶或組織模擬出一個使用FIFO調度策略的獨立MR集群。相比之下,公平調度器(實際上也支持作業池內的FIFO作業調度,使其類似於容量調度器)強制每個池內公平共享,使運行的作業共享池的資源。

轉載請聯系加米谷大數據!

MapReduce作業調度