燕明磊
摘要摘要:Hadoop是目前應用最廣泛的分布式框架,作業(yè)調(diào)度是其重要環(huán)節(jié),它直接關系到集群的性能與資源利用率。研究了作業(yè)調(diào)度流程、作業(yè)調(diào)度策略模式,對Hadoop自帶的3種調(diào)度器的設計要點與配置方法進行了探討。
關鍵詞關鍵詞:Hadoop; 作業(yè)調(diào)度; 調(diào)度器
DOIDOI:10.11907/rjdk.1431066
中圖分類號:TP301
文獻標識碼:A文章編號文章編號:16727800(2015)004000102
0引言
隨著云計算的興起和大數(shù)據(jù)[1]時代的到來,傳統(tǒng)的數(shù)據(jù)處理方法在系統(tǒng)擴展性、復雜應用適用性、海量數(shù)據(jù)處理速度與存儲等方面均遇到了很大的瓶頸問題,已經(jīng)越來越難以適應新應用的要求,而這些瓶頸問題正是分布式系統(tǒng)所擅長的。Apache Hadoop[2]是一個開源、高效的分布式平臺,它運用一切可以利用的資源,以“云”的形式解決大型復雜計算問題,同時還可以滿足每個用戶的需求。Hadoop是基于Java語言的分布式密集數(shù)據(jù)處理和數(shù)據(jù)分析軟件框架,是一種低成本處理的大數(shù)據(jù)平臺。
1Hadoop平臺
Hadoop有兩大核心框架:分布式文件系統(tǒng)HDFS和分布式計算框架Map/Reduce。HDFS是一個高可靠、透明、支持并發(fā)與容錯的文件系統(tǒng),基于主從結(jié)構(gòu)設計,由NameNode和DataNode共同完成,其中數(shù)據(jù)以數(shù)據(jù)塊(block)的形式存儲,NameNode主要負責數(shù)據(jù)塊元數(shù)據(jù)的存儲及數(shù)據(jù)塊的動態(tài)信息,DataNode負責數(shù)據(jù)塊的存儲。HDFS是Map/Reduce的存儲基礎。Map/Reduce[3]是并行處理大數(shù)據(jù)的計算框架,簡單說就是任務的合成與分解。Hadoop的Map/Reduce也是一種主從結(jié)構(gòu)設計,由JobTracker和TaskTracker兩部分組成。JobTracker是主服務節(jié)點,其任務之一是負責作業(yè)的切分與任務的調(diào)度分配;TaskTracker是從節(jié)點,主要負責任務的執(zhí)行。
2Hadoop作業(yè)調(diào)度
JobTracker服務于整個Map/Reduce計算框架,負責整個集群的作業(yè)控制和資源管理。作業(yè)控制主要是監(jiān)控作業(yè)的狀態(tài),在任務調(diào)度時提供調(diào)度依據(jù)。作業(yè)調(diào)度是影響Hadoop集群性能的重要方面,直接決定了作業(yè)執(zhí)行效率和集群資源利用率。作業(yè)調(diào)度由JobTracker節(jié)點上任務調(diào)度模塊完成,調(diào)度流程見圖1。
Hadoop作業(yè)調(diào)度采用三級策略模式[4]。Hadoop將作業(yè)執(zhí)行過程分為Map階段和Reduce階段,分別對應Map任務和Reduce任務。這些任務被分配在集群節(jié)點的任務槽(slot)上執(zhí)行,任務槽是節(jié)點資源的一種簡化表示形式,每個節(jié)點根據(jù)計算資源配置有一系列的Map槽和Reduce槽,典型的配置是節(jié)點的每個CPU配置一個槽,調(diào)度器的功能就是為任何空閑的slot分配任務。所有調(diào)度器采用三級策略,即為空閑的slot依次選取隊列、作業(yè)、任務。
3Hadoop調(diào)度方法
Hadoop有3種調(diào)度器:批處理調(diào)度器FIFO及兩個多用戶調(diào)度器Fair Scheduler和Capacity Scheduler,本文重點研究這3種調(diào)度器。
3.1FIFO調(diào)度
FIFO是默認的調(diào)度方式,該調(diào)度將所有作業(yè)都提交到JobQueue隊列, JobTracker先按照作業(yè)優(yōu)先級高低,再按照提交時間的先后順序執(zhí)行作業(yè)。Hadoop中只有一個作業(yè)隊列,被提交的作業(yè)按照先后順序在作業(yè)隊列中排隊,新來的作業(yè)排在隊尾。一個作業(yè)運行完后,總是從隊首進行下一個作業(yè)。這種調(diào)度策略的優(yōu)點是簡單、易于實現(xiàn),減輕了Jobtracker的負擔。缺點是對所有作業(yè)都一視同仁,沒有考慮到作業(yè)的緊迫程度,因而對小作業(yè)的運行不利。
3.2Fair調(diào)度
Fair調(diào)度適用于多用戶情形。算法設計思想是當集群中多個用戶提交作業(yè)時,為了保證公平性,調(diào)度器為每個用戶或組分配一個資源池,資源池里的每個作業(yè)都會按照其作業(yè)權(quán)重分配最小的資源共享量,以保證每個作業(yè)都能得到執(zhí)行。當集群中的某個節(jié)點出現(xiàn)空閑的slot時,則選擇已獲得的資源量和理論上應獲得的資源量的差值最大的作業(yè)來執(zhí)行,以保證公平。與FIFO相比,它支持多用戶多隊列、資源公平共享、保證最小共享量、支持時間片搶占、限制作業(yè)并發(fā)量、防止中間數(shù)據(jù)塞滿硬盤、動態(tài)調(diào)整各個資源池的資源量等,以保證調(diào)度的公平。
3.3Capacity調(diào)度
Capacity調(diào)度同樣支持多用戶。其設計思想是支持多個隊列,每個隊列可配置一定的資源量,采用FIFO調(diào)度策略。為了防止同一用戶的作業(yè)獨占隊列資源,該調(diào)度器會對同一用戶提交的作業(yè)所占資源量進行限定。調(diào)度時,首先計算每個隊列中正在運行的任務數(shù)與其應該分得的計算資源比值,選擇該比值最小的隊列;然后按照作業(yè)優(yōu)先級和提交時間順序選擇,同時考慮用戶資源量限制和內(nèi)存限制。該調(diào)度器的特點是保證計算能力、資源分配靈活、支持優(yōu)先級、支持多重租賃、支持資源密集型作業(yè),允許作業(yè)使用的資源量高于默認值。
4Hadoop調(diào)度器設計
隨著各種應用需求的提升,已有的調(diào)度器已很難適應需求的變化,因此調(diào)度器設計也要升級。Hadoop中任務調(diào)度器被設計成一個可插拔的模塊,設計從三方面考慮:①編寫JobInProgressListener;②編寫調(diào)度器類,繼承抽象類TaskScheduler;③配置并啟用Hadoop調(diào)度器。
編寫JobInProgressListener抽象類:
abstract Class JobInProgressListener throws IOException {
public abstract void JobAdded(JobInProgress job);
public abstract void JobRemoved (JobInProgress job);
public abstract void JobUpdated(JobChangeEvent event);
}
配置并啟用Hadoop調(diào)度器:
5結(jié)語
Hadoop作業(yè)調(diào)度的研究對于集群性能的提升具有重要意義。由于Hadoop使用了單JobTracker進行作業(yè)調(diào)度,對于Hadoop MapReduce計算架構(gòu)而言,提交的大量作業(yè)以及大規(guī)模的TaskTracker分布必將給JobTracker帶來巨大的工作壓力,因此運行的調(diào)度算法一定不能過于復雜。此外單JobTracker直接影響了Hadoop集群的可用性,一旦JobTracker失效或者宕機,那么整個集群將崩潰。因此,今后的Hadoop集群作業(yè)調(diào)度可能由多個JobTracker協(xié)同完成,相關的JobTracker分布式作業(yè)調(diào)度和資源管理算法將是下一個研究重點。
參考文獻參考文獻:
[1]王珊,王會舉,覃雄派,等. 架構(gòu)大數(shù)據(jù):挑戰(zhàn)、現(xiàn)狀與展望[J]. 計算機學報 2011,34(10):17411752.
[2]APACHE HADOOP.Hadoop[EB/OL]. http://hadoop.apache.org.
[3]李建江,崔健,王聃,等. MapReduce并行編程模型研究綜述[J].電子學報, 2011,39(11):26352642.
[4][美]TOM WHITE. Hadoop權(quán)威指南[M].第2版. 北京:清華大學出版社,2011.
責任編輯(責任編輯:杜能鋼)