黃偉建,周鳴愛
(河北工程大學(xué) 信息與電氣工程學(xué)院,河北 邯鄲056038)
云計算以高度的容錯機制、高可靠性[1]及較低的成本[2]等優(yōu)點吸引了許多使用者。由于云計算還不是很完善,因此開源云計算平臺Hadoop[3]的核心技術(shù)之一MapReduce[4]必然存在許多需要優(yōu)化之處,其中最重要的就是對MapReduce中單一Jobtracker 節(jié)點的優(yōu)化。雖然單一的Jobtracker在很大程度上簡化了邏輯控制流程,但是隨著云計算的發(fā)展,卻帶來許多瓶頸問題,影響了MapReduce的可用性及可擴展性。許多學(xué)者對調(diào)度算法[5]、Map中間輸出結(jié)果[6]、單一控制節(jié)點[7,8]等做了優(yōu)化,還有的提出了支持MapReduce的管理系統(tǒng)[9,10],但都沒有從根本上消除單點性能瓶頸,即沒有從根本上提高該模型的可用性。本文嘗試使用多個Jobtracker節(jié)點代替單一Jobtracker節(jié)點的優(yōu)化方法,以便從根本上解決單一Jobtracker節(jié)點失效帶來的系統(tǒng)崩潰問題,提高MapReduce的可用性。
在MapReduce中,主要有2 種節(jié)點來管理作業(yè)的執(zhí)行:一個Jobtracker 節(jié)點和多個Tasktracker 節(jié)點。Jobtracker通過調(diào)度Tasktracker來執(zhí)行作業(yè),Tasktracker執(zhí)行任務(wù)并通過發(fā)送 “心跳”到Jobtracker來報告任務(wù)的執(zhí)行進度,如果執(zhí)行期間有任務(wù)執(zhí)行失敗,Jobtracker就會調(diào)用一個新的Tasktracker來執(zhí)行失敗的任務(wù)[11]。由作業(yè)調(diào)度過程[12]可知,Jobtracker節(jié)點的工作有很多,而Tasktracker節(jié)點只是負責(zé)執(zhí)行任務(wù)。單一的Jobtracker雖然在很大程度上簡化了邏輯控制流程,但卻帶來了性能瓶頸:一旦Jobtracker失效,整個集群將會陷入癱瘓狀態(tài);整個集群的可擴展性受到Jobtracker處理能力的限制。因此本文要提出一種能從根本上解決單一Jobtracker所帶來的性能瓶頸的優(yōu)化方案。
優(yōu)化方案要繼承原模型并行計算、作業(yè)自動并行化的功能、高容錯和易擴展的特點,解決原系統(tǒng)中單一Jobtracker節(jié)點的性能瓶頸、節(jié)點間的通信及作業(yè)均衡問題。
經(jīng)研究分析,對單一Jobtracker節(jié)點性能瓶頸的優(yōu)化有2種方案:一種是以多節(jié)點結(jié)構(gòu)來替換單節(jié)點結(jié)構(gòu)。另一種是將Jobtracker的部分功能下放到Tasktracker。對規(guī)模固定的系統(tǒng)2 種方案都可行。但對規(guī)??蓴U展的系統(tǒng),第2種方案中單一的Jobtracker仍是個問題。鑒于MapReduce易擴展的特點,本文采取第1種優(yōu)化方案,設(shè)計一個具有分布式Jobtracker節(jié)點的MapReduce模型。
分布式Jobtracker節(jié)點模型即是整個系統(tǒng)的主控節(jié)點,又是一個小型的分布式系統(tǒng)。有負責(zé)提供服務(wù)的普通節(jié)點,又有負責(zé)管理Jobtracker集群的特殊節(jié)點,并且這2 種節(jié)點都有相應(yīng)的后備節(jié)點。從宏觀上看,Jobtracker集群中的每個Jobtracker節(jié)點都是對等的,對整個文件系統(tǒng)提供一致的服務(wù)。然而從微觀上看,在Jobtracker集群內(nèi)部,為確保集群正常運行,必須有一個高性能的Jobtracker節(jié)點管理集群內(nèi)的所有Jobtracker節(jié)點并監(jiān)控它們的運行狀態(tài)??傮w結(jié)構(gòu)如圖1所示。
圖1 Jobtracker節(jié)點集群結(jié)構(gòu)
由圖1可知在分布式Jobtracker集群中有3種類型的節(jié)點,它們分別承擔(dān)著不同的任務(wù)。
(1)Jobtracker節(jié)點
集群中的Jobtracker與原MapReduce中的Jobtracker任務(wù)基本相同,但原模型中單一的Jobtracker負責(zé)調(diào)度全部的Tasktracker,而在分布式Jobtracker節(jié)點模型中,對Tasktracker的調(diào)度和管理是由集群中所有Jobtracker節(jié)點共同承擔(dān)的。Jobtracker集群中不但包含普通的Jobtracker節(jié)點,還包含Leader節(jié)點和Second Leader節(jié)點,這2個節(jié)點除了負責(zé)普通Jobtracker節(jié)點所負責(zé)的工作外,還負責(zé)特殊的工作。
(2)Leader節(jié)點
Leader在整個Jobtracker集群中是唯一的,是集群中性能最好的節(jié)點,是根據(jù)選舉機制選舉出來的。一旦確定了Leader節(jié)點,只有在Leader失效的情況下才會更換,否則是不會更換的。Leader是負責(zé)管理整個Jobtracker集群的中心節(jié)點,但同時也具有普通Jobtracker的功能,主要負責(zé)的工作有:監(jiān)控Jobtracker集群中每一個Jobtracker節(jié)點的工作狀態(tài);處理集群中失效的Jobtracker節(jié)點;轉(zhuǎn)發(fā)Tasktracker節(jié)點的狀態(tài)信息等。
(3)Second Leader節(jié)點
Second Leader是Leader的備份節(jié)點,是在選舉Leader的同時被選出來的,性能僅次于Leader。
(4)Second Jobtracker節(jié)點
當Jobtracker集群中某個普通Jobtracker節(jié)點失效時,Leader會及時的選擇一個Second Jobtracker來替換失效的Jobtracker。Second Jobtracker在真正成為Jobtracker之前,需加載失效節(jié)點中的信息后才能成為真正的Jobtracker。
在原MapReduce中,節(jié)點間通信是通過相互發(fā)送與接收 “心跳”信息。“心跳”信息主要有兩方面的作用:一方面Jobtracker根據(jù) “心跳”信息了解Tasktracker的狀態(tài);另一方面Tasktracker的可用資源信息也通過 “心跳信息”傳送。由于只有一個Jobtracker,因此Jobtracker與Tasktrackers間是一對多的通信。而在分布式Jobtracker節(jié)點模型中心跳信息的作用不變,只是它有多個Jobtracker節(jié)點,對于Jobtracker節(jié)點與Tasktracker節(jié)點間的通信就變成了多對多,因此,要對通信方式優(yōu)化提高MapReduce 的可用性。
在分布式Jobtracker集群中,將節(jié)點狀態(tài)信息和可用資源信息設(shè)計成2種獨立的 “心跳”信息。Tasktracker周期性的向Leader發(fā)送資源 “心跳”信息,再由Leader將接收到的Tasktracker的資源信息轉(zhuǎn)發(fā)給其余的Jobtracker節(jié)點。然后Jobtracker 根據(jù)資源 “心跳”信息調(diào)度相應(yīng)的Tasktracker。這時,被調(diào)度的Tasktracker需向相應(yīng)的Jobtracker節(jié)點發(fā)送狀態(tài) “心跳”信息。這樣優(yōu)化減輕了Tasktracker向Jobtracker集群廣播 “心跳”信息所引起的網(wǎng)絡(luò)負荷。
在分布式的Jobtracker集群中,當所有客戶端將作業(yè)都集中提交到一些Jobtracker節(jié)點上時,會導(dǎo)致在整個集群中一部分Jobtracker節(jié)點 “飽和”甚至 “溢出”,而另一部分Jobtracker節(jié)點處于閑置狀態(tài),因此需要對作業(yè)均衡進行優(yōu)化。本系統(tǒng)以Jobtracker上作業(yè)數(shù)量來衡量當前Jobtracker所承載的作業(yè)量。
Jobtracker集群實現(xiàn)作業(yè)均衡分配的前提是掌握整個Jobtracker集群中各節(jié)點所承載的作業(yè)量。因此必須先對各節(jié)點所承載的作業(yè)量信息進行收集。收集機制是每個Jobtracker節(jié)點周期性的發(fā)送它所承載的作業(yè)量到作業(yè)量均衡管理節(jié)點——Leader。Leader就需要維護一個各Jobtracker節(jié)點承載的作業(yè)量列表,然后將這個列表發(fā)送到每一個Jobtracker節(jié)點,再對作業(yè)實施均衡分配,使Jobtracker集群中各個Jobtracker所處理的作業(yè)量相近??蛻舳丝梢噪S機的向集群中的任何Jobtracker提交作業(yè),這個節(jié)點根據(jù)作業(yè)量列表,將該作業(yè)移交到作業(yè)量最小的節(jié)點。以達到集群中各Jobtracker作業(yè)均衡。
由于Jobtracker與Leader的通信并不是實時的,當向某個Jobtracker提交作業(yè)時,這個節(jié)點可能已經(jīng)不是作業(yè)量最小的節(jié)點,但這個消息還沒傳到每個節(jié)點,客戶端還將繼續(xù)向該節(jié)點提交作業(yè),這就會導(dǎo)致短時間內(nèi)作業(yè)量的不均衡,為避免這種情況,我們選擇以下策略,來優(yōu)化提交對象的選取。
(1)設(shè)置報警參數(shù):當某個節(jié)點上的作業(yè)量變多時,設(shè)定的報警參數(shù)就觸發(fā)該節(jié)點向Leader發(fā)送心跳,Leader就會將新作業(yè)量列表發(fā)送給每一個Jobtracker節(jié)點,從而對作業(yè)提交對象進行調(diào)整。
(2)設(shè)置保護參數(shù):每個Jobtracker都設(shè)置保護參數(shù),當某節(jié)點的作業(yè)量等于該參數(shù)時,將拒絕接收作業(yè),同時查詢本節(jié)點上的作業(yè)量列表,將該作業(yè)提交到除自身外作業(yè)量最小的Jobtracker。
本實驗需將HDFS與優(yōu)化的MapReduce組成新系統(tǒng)進行測試,根據(jù)文獻 [13]將Tasktracker和Datanode運行在同一個節(jié)點上,Jobtracker和Namenode運行在同一個節(jié)點上,為了測試優(yōu)化后的MapReduce,采用的元數(shù)據(jù)算法為散列算法[14]。
本文所采用的實驗環(huán)境結(jié)構(gòu)如圖2所示。
圖2中每一個節(jié)點都是一臺PC,所用軟件為Hadoop-0.21.0。各節(jié)點的配置為:客戶端:CPU Intel2.0GHZ內(nèi)存1GB;Jobtracker集群:CPU Intel2.4GHZ內(nèi)存2GB;Tasktracker集群:CPU Intel2.0GHZ 內(nèi)存512 MB。其中網(wǎng)絡(luò)硬件均為千兆以太網(wǎng)卡,操作系統(tǒng)均為Linux4。
圖2 實驗環(huán)境結(jié)構(gòu)
為了更全面測試優(yōu)化后的MapReduce,做了3 種不同的實驗。為使集群正常工作,首先要完成對各節(jié)點的配置,然后可以通過ping命令測試系統(tǒng)是否能正常工作。
(1)系統(tǒng)容錯性測試
情況1:重啟Leader,模擬Leader失效。
情況2:重啟Jobtracker,模擬Jobtracker失效。
兩種情況使用的測試用例均為在一組隨機生成的數(shù)中找出最大值。將數(shù)據(jù)塊的數(shù)量設(shè)置為一個可變的參數(shù),每個塊的大小為64 MB。實驗結(jié)果如圖3所示。
圖3 系統(tǒng)容錯性測試結(jié)果
由測試結(jié)果可知,Leader失效后需要的恢復(fù)時間很短,這是因為Second Leader周期的向Leader發(fā)送 “心跳”,一旦得不到響應(yīng),就認為Leader失效,然后迅速接替Leader的工作。同時可以看到Jobtracker失效后需要的恢復(fù)時間比Leader多好多,且隨著數(shù)據(jù)塊的增加而增加。這是因為Second Jobtracker接替Jobtracker需要加載原Jobtracker的信息且需要通知系統(tǒng)中的其它節(jié)點。這個過程需要一定的時間。
(2)系統(tǒng)執(zhí)行效率測試
情況1:客戶端對系統(tǒng)發(fā)出寫5000、10000、15000 個文件的請求,先在優(yōu)化后的系統(tǒng)上測試其執(zhí)行效率,然后再搭建一個原Hadoop架構(gòu) (Jobtracker集群中只剩下一個節(jié)點,同時去掉Second Jobtracker),重新配置后[15],使用同樣的測試用例進行測試,測試結(jié)果如圖4所示。
圖4 一個客戶端的測試結(jié)果
由測試結(jié)果可知,隨著文件數(shù)的增加2種系統(tǒng)的執(zhí)行時間都會增加,但優(yōu)化后的系統(tǒng)在有些情況下比原系統(tǒng)所需要的作業(yè)執(zhí)行時間要長,而有些情況下又和原系統(tǒng)的作業(yè)執(zhí)行時間差不多,這種結(jié)果是在預(yù)料之中的,因為當客戶端向Jobtracker集群提交作業(yè)時,對節(jié)點的選擇是隨機的,可能此時選擇的節(jié)點剛好就是集群中該時刻作業(yè)量最小的Jobtracker節(jié)點,這樣就和原系統(tǒng)的作業(yè)執(zhí)行時間差不多,但可能提交的節(jié)點不是集群中該時刻作業(yè)量最小的節(jié)點,需要對提交對象重新選取,這樣就增加了執(zhí)行時間的開銷。
情況2:分別在情況1的兩個系統(tǒng)中添加客戶端,測試兩個客戶端同時提交并發(fā)寫入2500、5000、7500個文件的請求,(采用默認的調(diào)度策略FIFO)測試結(jié)果如圖5所示。
圖5 兩個客戶端的測試結(jié)果
將圖5與圖4的結(jié)果對比發(fā)現(xiàn),客戶端增多時,兩個系統(tǒng)的執(zhí)行時間都增加了,但是從圖5可以看到優(yōu)化后的系統(tǒng)執(zhí)行效率要高于原系統(tǒng),且文件數(shù)越多這種優(yōu)勢就越明顯。這主要是因為FIFO 的調(diào)度策略且優(yōu)化后的系統(tǒng)有多個Jobtracker,這樣多個客戶端可以同時向不同的Jobtracker提交作業(yè)請求從而提升系統(tǒng)的效率。而原系統(tǒng)只有一個Jobtracker,當有多個客戶端提交作業(yè)時,只能排隊等待,這樣就增加了時間開銷。
綜上所述,從總體性能來看,優(yōu)化后的系統(tǒng)具有高可用性。
MapReduce作為Hadoop的關(guān)鍵技術(shù)之一,存在單一Jobtracker節(jié)點瓶頸問題,影響了MapReduce 的可用性,本文提出了分布式Jobtracker節(jié)點模型,該模型是對目前MapReduce架構(gòu)的優(yōu)化和改進,優(yōu)化的出發(fā)點是擴充Jobtracker節(jié)點,以便從根本上消除單點性能瓶頸。
系統(tǒng)容錯性測試實驗說明在優(yōu)化后的MapReduce中Jobtracker節(jié)點失效是不會影響系統(tǒng)正常運行的。這樣從根本上提高了MapReduce的可靠性及可用性。同時系統(tǒng)執(zhí)行效率測試實驗結(jié)果表明,當有多個客戶端同時提交作業(yè)時,優(yōu)化后的系統(tǒng)執(zhí)行效率要高于原系統(tǒng),但當只有一個客戶端提交作業(yè)時,與原系統(tǒng)相比優(yōu)化后的系統(tǒng)作業(yè)執(zhí)行效率的高低是不確定的,這是新系統(tǒng)仍需優(yōu)化的地方。此外還存在2個待優(yōu)化之處:一是HDFS中元數(shù)據(jù)的分布算法優(yōu)化;二是如何縮短Jobtracker節(jié)點失效后系統(tǒng)恢復(fù)正常的時間。在大規(guī)模集群中,通過對這些地方的優(yōu)化能在一定程度上進一步提升MapReduce的可用性及集群性能。這也本文是今后的研究重點。
[1]CHEN Haibo.The research of cloud computing platform credibility enhancement technique[D].Shanghai:Fudan University,2009:1-150 (in Chinese).[陳海波.云計算平臺可信性增強技術(shù)的研究 [D].上海:上海復(fù)旦大學(xué),2009:1-150.]
[2]LIU Jing.The research of cloud computing platform cost effectiveness[D].Beijing:Beijing University of Posts and Telecommunications,2010:1-73 (in Chinese).[柳敬.云計算平臺的成本效用研究 [D].北京:北京郵電大學(xué),2010:1-73.]
[3]Apache.Apache hadoop [EB/OL]. [2013-10-01].http://hadoop.apache.org/core/.
[4]Apache.Hadoop mapreduce[EB/OL].[2011-12-01].http://hadoop.apache.org/mapreduce/.
[5]XUAN Ji.Research and improvement of MapReduce scheduling mechanism on cloud computing [D].Changchun:Jilin University,2013:1-48 (in Chinese). [玄吉.云計算中對于MapReduce調(diào)度機制的研究與改進 [D].長春:吉林大學(xué),2013:1-48.]
[6]HE Rongbo.The optimization and performance for the MapReduce performance in Hadoop [D].Beijing:Beijing University of Chemical Technology,2011:1-76 (in Chinese).[何榮波.MapReduee模型在Hadoop中的性能優(yōu)化及改進 [D].北京:北京化工大學(xué),2011:1-76.]
[7]Murthy AC.The next generation of apache hadoop MapReduce[EB/OL]. [2011-12-01].http://developer.Yahoo.com/blogs/hadoop/posts/2011/02/mapreduce-nextgen/.
[8]Murthy AC.Proposal for redesign/refactoring of the jobtracker and tasktracker [EB/OL]. [2011-12-01].https://issues.apache.org/jira/browse/MAPREDUCE-278.
[9]Apache.Mesos:Dynamic resource sharing for clusters [EB/OL].[2011-12-01].http://www.mesosproject.org/.
[10]Hindman B,Konwinski A,Zaharia M,et al.Mesos:A platform for fine-grained resource sharing in the data cent[C]//Proceedings of the 8th USENIX Conference on Networked Systems Design and Implementation.Boston:USENIX Association Berkeley,2011:22-30.
[11]White T.Hadoop-the definitive guide [M].1st ed.America:O’Reilly Media,2009:153-174.
[12]TAO Tao.MapReduce-based resource scheduling model and algorithm research in cloud environment[D].Dalian:Dalian Martime University,2012:17-22 (in Chinese). [陶韜.云計算環(huán)境下基于MapReduce 的資源調(diào)度模型和算法研究[D].大連:大連海事大學(xué),2012:17-22.]
[13]WANG Peng.The key techonology and application of cloud computing [M]Beijing:The People’s Posts and Telecommunications Press,2010:66-78 (in Chinese).[王鵬.云計算的關(guān)鍵技術(shù)與應(yīng)用實例 [M].北京:人民郵電出版社,2010:66-78.]
[14]WU Wei.The research on metadata management of massive storage system [D].Wuhai:Huazhong University of Science and Technology,2010:1-107 (in Chinese).[吳偉.海量存儲系統(tǒng)元數(shù)據(jù)管理的研究 [D].武漢:華中科技大學(xué),2010:1-107.]
[15]LIU Gang,HOU Bin,ZHAI Zhouwei.Hadoop-the open source platform of cloud computing[M].Beijing:Beijing University of Posts and Telecommunications Press,2011:95-101 (in Chinese). [劉剛,候賓,翟周偉.Hadoop——開源云計算平臺[M].北京:北京郵電大學(xué)出版社,2011:95-101.]