黃偉建,周鳴愛(ài)
(河北工程大學(xué) 信息與電氣工程學(xué)院,河北 邯鄲056038)
云計(jì)算以高度的容錯(cuò)機(jī)制、高可靠性[1]及較低的成本[2]等優(yōu)點(diǎn)吸引了許多使用者。由于云計(jì)算還不是很完善,因此開(kāi)源云計(jì)算平臺(tái)Hadoop[3]的核心技術(shù)之一MapReduce[4]必然存在許多需要優(yōu)化之處,其中最重要的就是對(duì)MapReduce中單一Jobtracker 節(jié)點(diǎn)的優(yōu)化。雖然單一的Jobtracker在很大程度上簡(jiǎn)化了邏輯控制流程,但是隨著云計(jì)算的發(fā)展,卻帶來(lái)許多瓶頸問(wèn)題,影響了MapReduce的可用性及可擴(kuò)展性。許多學(xué)者對(duì)調(diào)度算法[5]、Map中間輸出結(jié)果[6]、單一控制節(jié)點(diǎn)[7,8]等做了優(yōu)化,還有的提出了支持MapReduce的管理系統(tǒng)[9,10],但都沒(méi)有從根本上消除單點(diǎn)性能瓶頸,即沒(méi)有從根本上提高該模型的可用性。本文嘗試使用多個(gè)Jobtracker節(jié)點(diǎn)代替單一Jobtracker節(jié)點(diǎn)的優(yōu)化方法,以便從根本上解決單一Jobtracker節(jié)點(diǎn)失效帶來(lái)的系統(tǒng)崩潰問(wèn)題,提高M(jìn)apReduce的可用性。
在MapReduce中,主要有2 種節(jié)點(diǎn)來(lái)管理作業(yè)的執(zhí)行:一個(gè)Jobtracker 節(jié)點(diǎn)和多個(gè)Tasktracker 節(jié)點(diǎn)。Jobtracker通過(guò)調(diào)度Tasktracker來(lái)執(zhí)行作業(yè),Tasktracker執(zhí)行任務(wù)并通過(guò)發(fā)送 “心跳”到Jobtracker來(lái)報(bào)告任務(wù)的執(zhí)行進(jìn)度,如果執(zhí)行期間有任務(wù)執(zhí)行失敗,Jobtracker就會(huì)調(diào)用一個(gè)新的Tasktracker來(lái)執(zhí)行失敗的任務(wù)[11]。由作業(yè)調(diào)度過(guò)程[12]可知,Jobtracker節(jié)點(diǎn)的工作有很多,而Tasktracker節(jié)點(diǎn)只是負(fù)責(zé)執(zhí)行任務(wù)。單一的Jobtracker雖然在很大程度上簡(jiǎn)化了邏輯控制流程,但卻帶來(lái)了性能瓶頸:一旦Jobtracker失效,整個(gè)集群將會(huì)陷入癱瘓狀態(tài);整個(gè)集群的可擴(kuò)展性受到Jobtracker處理能力的限制。因此本文要提出一種能從根本上解決單一Jobtracker所帶來(lái)的性能瓶頸的優(yōu)化方案。
優(yōu)化方案要繼承原模型并行計(jì)算、作業(yè)自動(dòng)并行化的功能、高容錯(cuò)和易擴(kuò)展的特點(diǎn),解決原系統(tǒng)中單一Jobtracker節(jié)點(diǎn)的性能瓶頸、節(jié)點(diǎn)間的通信及作業(yè)均衡問(wèn)題。
經(jīng)研究分析,對(duì)單一Jobtracker節(jié)點(diǎn)性能瓶頸的優(yōu)化有2種方案:一種是以多節(jié)點(diǎn)結(jié)構(gòu)來(lái)替換單節(jié)點(diǎn)結(jié)構(gòu)。另一種是將Jobtracker的部分功能下放到Tasktracker。對(duì)規(guī)模固定的系統(tǒng)2 種方案都可行。但對(duì)規(guī)模可擴(kuò)展的系統(tǒng),第2種方案中單一的Jobtracker仍是個(gè)問(wèn)題。鑒于MapReduce易擴(kuò)展的特點(diǎn),本文采取第1種優(yōu)化方案,設(shè)計(jì)一個(gè)具有分布式Jobtracker節(jié)點(diǎn)的MapReduce模型。
分布式Jobtracker節(jié)點(diǎn)模型即是整個(gè)系統(tǒng)的主控節(jié)點(diǎn),又是一個(gè)小型的分布式系統(tǒng)。有負(fù)責(zé)提供服務(wù)的普通節(jié)點(diǎn),又有負(fù)責(zé)管理Jobtracker集群的特殊節(jié)點(diǎn),并且這2 種節(jié)點(diǎn)都有相應(yīng)的后備節(jié)點(diǎn)。從宏觀上看,Jobtracker集群中的每個(gè)Jobtracker節(jié)點(diǎn)都是對(duì)等的,對(duì)整個(gè)文件系統(tǒng)提供一致的服務(wù)。然而從微觀上看,在Jobtracker集群內(nèi)部,為確保集群正常運(yùn)行,必須有一個(gè)高性能的Jobtracker節(jié)點(diǎn)管理集群內(nèi)的所有Jobtracker節(jié)點(diǎn)并監(jiān)控它們的運(yùn)行狀態(tài)??傮w結(jié)構(gòu)如圖1所示。
圖1 Jobtracker節(jié)點(diǎn)集群結(jié)構(gòu)
由圖1可知在分布式Jobtracker集群中有3種類型的節(jié)點(diǎn),它們分別承擔(dān)著不同的任務(wù)。
(1)Jobtracker節(jié)點(diǎn)
集群中的Jobtracker與原MapReduce中的Jobtracker任務(wù)基本相同,但原模型中單一的Jobtracker負(fù)責(zé)調(diào)度全部的Tasktracker,而在分布式Jobtracker節(jié)點(diǎn)模型中,對(duì)Tasktracker的調(diào)度和管理是由集群中所有Jobtracker節(jié)點(diǎn)共同承擔(dān)的。Jobtracker集群中不但包含普通的Jobtracker節(jié)點(diǎn),還包含Leader節(jié)點(diǎn)和Second Leader節(jié)點(diǎn),這2個(gè)節(jié)點(diǎn)除了負(fù)責(zé)普通Jobtracker節(jié)點(diǎn)所負(fù)責(zé)的工作外,還負(fù)責(zé)特殊的工作。
(2)Leader節(jié)點(diǎn)
Leader在整個(gè)Jobtracker集群中是唯一的,是集群中性能最好的節(jié)點(diǎn),是根據(jù)選舉機(jī)制選舉出來(lái)的。一旦確定了Leader節(jié)點(diǎn),只有在Leader失效的情況下才會(huì)更換,否則是不會(huì)更換的。Leader是負(fù)責(zé)管理整個(gè)Jobtracker集群的中心節(jié)點(diǎn),但同時(shí)也具有普通Jobtracker的功能,主要負(fù)責(zé)的工作有:監(jiān)控Jobtracker集群中每一個(gè)Jobtracker節(jié)點(diǎn)的工作狀態(tài);處理集群中失效的Jobtracker節(jié)點(diǎn);轉(zhuǎn)發(fā)Tasktracker節(jié)點(diǎn)的狀態(tài)信息等。
(3)Second Leader節(jié)點(diǎn)
Second Leader是Leader的備份節(jié)點(diǎn),是在選舉Leader的同時(shí)被選出來(lái)的,性能僅次于Leader。
(4)Second Jobtracker節(jié)點(diǎn)
當(dāng)Jobtracker集群中某個(gè)普通Jobtracker節(jié)點(diǎn)失效時(shí),Leader會(huì)及時(shí)的選擇一個(gè)Second Jobtracker來(lái)替換失效的Jobtracker。Second Jobtracker在真正成為Jobtracker之前,需加載失效節(jié)點(diǎn)中的信息后才能成為真正的Jobtracker。
在原MapReduce中,節(jié)點(diǎn)間通信是通過(guò)相互發(fā)送與接收 “心跳”信息?!靶奶毙畔⒅饕袃煞矫娴淖饔茫阂环矫鍶obtracker根據(jù) “心跳”信息了解Tasktracker的狀態(tài);另一方面Tasktracker的可用資源信息也通過(guò) “心跳信息”傳送。由于只有一個(gè)Jobtracker,因此Jobtracker與Tasktrackers間是一對(duì)多的通信。而在分布式Jobtracker節(jié)點(diǎn)模型中心跳信息的作用不變,只是它有多個(gè)Jobtracker節(jié)點(diǎn),對(duì)于Jobtracker節(jié)點(diǎn)與Tasktracker節(jié)點(diǎn)間的通信就變成了多對(duì)多,因此,要對(duì)通信方式優(yōu)化提高M(jìn)apReduce 的可用性。
在分布式Jobtracker集群中,將節(jié)點(diǎn)狀態(tài)信息和可用資源信息設(shè)計(jì)成2種獨(dú)立的 “心跳”信息。Tasktracker周期性的向Leader發(fā)送資源 “心跳”信息,再由Leader將接收到的Tasktracker的資源信息轉(zhuǎn)發(fā)給其余的Jobtracker節(jié)點(diǎn)。然后Jobtracker 根據(jù)資源 “心跳”信息調(diào)度相應(yīng)的Tasktracker。這時(shí),被調(diào)度的Tasktracker需向相應(yīng)的Jobtracker節(jié)點(diǎn)發(fā)送狀態(tài) “心跳”信息。這樣優(yōu)化減輕了Tasktracker向Jobtracker集群廣播 “心跳”信息所引起的網(wǎng)絡(luò)負(fù)荷。
在分布式的Jobtracker集群中,當(dāng)所有客戶端將作業(yè)都集中提交到一些Jobtracker節(jié)點(diǎn)上時(shí),會(huì)導(dǎo)致在整個(gè)集群中一部分Jobtracker節(jié)點(diǎn) “飽和”甚至 “溢出”,而另一部分Jobtracker節(jié)點(diǎn)處于閑置狀態(tài),因此需要對(duì)作業(yè)均衡進(jìn)行優(yōu)化。本系統(tǒng)以Jobtracker上作業(yè)數(shù)量來(lái)衡量當(dāng)前Jobtracker所承載的作業(yè)量。
Jobtracker集群實(shí)現(xiàn)作業(yè)均衡分配的前提是掌握整個(gè)Jobtracker集群中各節(jié)點(diǎn)所承載的作業(yè)量。因此必須先對(duì)各節(jié)點(diǎn)所承載的作業(yè)量信息進(jìn)行收集。收集機(jī)制是每個(gè)Jobtracker節(jié)點(diǎn)周期性的發(fā)送它所承載的作業(yè)量到作業(yè)量均衡管理節(jié)點(diǎn)——Leader。Leader就需要維護(hù)一個(gè)各Jobtracker節(jié)點(diǎn)承載的作業(yè)量列表,然后將這個(gè)列表發(fā)送到每一個(gè)Jobtracker節(jié)點(diǎn),再對(duì)作業(yè)實(shí)施均衡分配,使Jobtracker集群中各個(gè)Jobtracker所處理的作業(yè)量相近。客戶端可以隨機(jī)的向集群中的任何Jobtracker提交作業(yè),這個(gè)節(jié)點(diǎn)根據(jù)作業(yè)量列表,將該作業(yè)移交到作業(yè)量最小的節(jié)點(diǎn)。以達(dá)到集群中各Jobtracker作業(yè)均衡。
由于Jobtracker與Leader的通信并不是實(shí)時(shí)的,當(dāng)向某個(gè)Jobtracker提交作業(yè)時(shí),這個(gè)節(jié)點(diǎn)可能已經(jīng)不是作業(yè)量最小的節(jié)點(diǎn),但這個(gè)消息還沒(méi)傳到每個(gè)節(jié)點(diǎn),客戶端還將繼續(xù)向該節(jié)點(diǎn)提交作業(yè),這就會(huì)導(dǎo)致短時(shí)間內(nèi)作業(yè)量的不均衡,為避免這種情況,我們選擇以下策略,來(lái)優(yōu)化提交對(duì)象的選取。
(1)設(shè)置報(bào)警參數(shù):當(dāng)某個(gè)節(jié)點(diǎn)上的作業(yè)量變多時(shí),設(shè)定的報(bào)警參數(shù)就觸發(fā)該節(jié)點(diǎn)向Leader發(fā)送心跳,Leader就會(huì)將新作業(yè)量列表發(fā)送給每一個(gè)Jobtracker節(jié)點(diǎn),從而對(duì)作業(yè)提交對(duì)象進(jìn)行調(diào)整。
(2)設(shè)置保護(hù)參數(shù):每個(gè)Jobtracker都設(shè)置保護(hù)參數(shù),當(dāng)某節(jié)點(diǎn)的作業(yè)量等于該參數(shù)時(shí),將拒絕接收作業(yè),同時(shí)查詢本節(jié)點(diǎn)上的作業(yè)量列表,將該作業(yè)提交到除自身外作業(yè)量最小的Jobtracker。
本實(shí)驗(yàn)需將HDFS與優(yōu)化的MapReduce組成新系統(tǒng)進(jìn)行測(cè)試,根據(jù)文獻(xiàn) [13]將Tasktracker和Datanode運(yùn)行在同一個(gè)節(jié)點(diǎn)上,Jobtracker和Namenode運(yùn)行在同一個(gè)節(jié)點(diǎn)上,為了測(cè)試優(yōu)化后的MapReduce,采用的元數(shù)據(jù)算法為散列算法[14]。
本文所采用的實(shí)驗(yàn)環(huán)境結(jié)構(gòu)如圖2所示。
圖2中每一個(gè)節(jié)點(diǎn)都是一臺(tái)PC,所用軟件為Hadoop-0.21.0。各節(jié)點(diǎn)的配置為:客戶端: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)均為L(zhǎng)inux4。
圖2 實(shí)驗(yàn)環(huán)境結(jié)構(gòu)
為了更全面測(cè)試優(yōu)化后的MapReduce,做了3 種不同的實(shí)驗(yàn)。為使集群正常工作,首先要完成對(duì)各節(jié)點(diǎn)的配置,然后可以通過(guò)ping命令測(cè)試系統(tǒng)是否能正常工作。
(1)系統(tǒng)容錯(cuò)性測(cè)試
情況1:重啟Leader,模擬Leader失效。
情況2:重啟Jobtracker,模擬Jobtracker失效。
兩種情況使用的測(cè)試用例均為在一組隨機(jī)生成的數(shù)中找出最大值。將數(shù)據(jù)塊的數(shù)量設(shè)置為一個(gè)可變的參數(shù),每個(gè)塊的大小為64 MB。實(shí)驗(yàn)結(jié)果如圖3所示。
圖3 系統(tǒng)容錯(cuò)性測(cè)試結(jié)果
由測(cè)試結(jié)果可知,Leader失效后需要的恢復(fù)時(shí)間很短,這是因?yàn)镾econd Leader周期的向Leader發(fā)送 “心跳”,一旦得不到響應(yīng),就認(rèn)為L(zhǎng)eader失效,然后迅速接替Leader的工作。同時(shí)可以看到Jobtracker失效后需要的恢復(fù)時(shí)間比Leader多好多,且隨著數(shù)據(jù)塊的增加而增加。這是因?yàn)镾econd Jobtracker接替Jobtracker需要加載原Jobtracker的信息且需要通知系統(tǒng)中的其它節(jié)點(diǎn)。這個(gè)過(guò)程需要一定的時(shí)間。
(2)系統(tǒng)執(zhí)行效率測(cè)試
情況1:客戶端對(duì)系統(tǒng)發(fā)出寫(xiě)5000、10000、15000 個(gè)文件的請(qǐng)求,先在優(yōu)化后的系統(tǒng)上測(cè)試其執(zhí)行效率,然后再搭建一個(gè)原Hadoop架構(gòu) (Jobtracker集群中只剩下一個(gè)節(jié)點(diǎn),同時(shí)去掉Second Jobtracker),重新配置后[15],使用同樣的測(cè)試用例進(jìn)行測(cè)試,測(cè)試結(jié)果如圖4所示。
圖4 一個(gè)客戶端的測(cè)試結(jié)果
由測(cè)試結(jié)果可知,隨著文件數(shù)的增加2種系統(tǒng)的執(zhí)行時(shí)間都會(huì)增加,但優(yōu)化后的系統(tǒng)在有些情況下比原系統(tǒng)所需要的作業(yè)執(zhí)行時(shí)間要長(zhǎng),而有些情況下又和原系統(tǒng)的作業(yè)執(zhí)行時(shí)間差不多,這種結(jié)果是在預(yù)料之中的,因?yàn)楫?dāng)客戶端向Jobtracker集群提交作業(yè)時(shí),對(duì)節(jié)點(diǎn)的選擇是隨機(jī)的,可能此時(shí)選擇的節(jié)點(diǎn)剛好就是集群中該時(shí)刻作業(yè)量最小的Jobtracker節(jié)點(diǎn),這樣就和原系統(tǒng)的作業(yè)執(zhí)行時(shí)間差不多,但可能提交的節(jié)點(diǎn)不是集群中該時(shí)刻作業(yè)量最小的節(jié)點(diǎn),需要對(duì)提交對(duì)象重新選取,這樣就增加了執(zhí)行時(shí)間的開(kāi)銷。
情況2:分別在情況1的兩個(gè)系統(tǒng)中添加客戶端,測(cè)試兩個(gè)客戶端同時(shí)提交并發(fā)寫(xiě)入2500、5000、7500個(gè)文件的請(qǐng)求,(采用默認(rèn)的調(diào)度策略FIFO)測(cè)試結(jié)果如圖5所示。
圖5 兩個(gè)客戶端的測(cè)試結(jié)果
將圖5與圖4的結(jié)果對(duì)比發(fā)現(xiàn),客戶端增多時(shí),兩個(gè)系統(tǒng)的執(zhí)行時(shí)間都增加了,但是從圖5可以看到優(yōu)化后的系統(tǒng)執(zhí)行效率要高于原系統(tǒng),且文件數(shù)越多這種優(yōu)勢(shì)就越明顯。這主要是因?yàn)镕IFO 的調(diào)度策略且優(yōu)化后的系統(tǒng)有多個(gè)Jobtracker,這樣多個(gè)客戶端可以同時(shí)向不同的Jobtracker提交作業(yè)請(qǐng)求從而提升系統(tǒng)的效率。而原系統(tǒng)只有一個(gè)Jobtracker,當(dāng)有多個(gè)客戶端提交作業(yè)時(shí),只能排隊(duì)等待,這樣就增加了時(shí)間開(kāi)銷。
綜上所述,從總體性能來(lái)看,優(yōu)化后的系統(tǒng)具有高可用性。
MapReduce作為Hadoop的關(guān)鍵技術(shù)之一,存在單一Jobtracker節(jié)點(diǎn)瓶頸問(wèn)題,影響了MapReduce 的可用性,本文提出了分布式Jobtracker節(jié)點(diǎn)模型,該模型是對(duì)目前MapReduce架構(gòu)的優(yōu)化和改進(jìn),優(yōu)化的出發(fā)點(diǎn)是擴(kuò)充Jobtracker節(jié)點(diǎn),以便從根本上消除單點(diǎn)性能瓶頸。
系統(tǒng)容錯(cuò)性測(cè)試實(shí)驗(yàn)說(shuō)明在優(yōu)化后的MapReduce中Jobtracker節(jié)點(diǎn)失效是不會(huì)影響系統(tǒng)正常運(yùn)行的。這樣從根本上提高了MapReduce的可靠性及可用性。同時(shí)系統(tǒng)執(zhí)行效率測(cè)試實(shí)驗(yàn)結(jié)果表明,當(dāng)有多個(gè)客戶端同時(shí)提交作業(yè)時(shí),優(yōu)化后的系統(tǒng)執(zhí)行效率要高于原系統(tǒng),但當(dāng)只有一個(gè)客戶端提交作業(yè)時(shí),與原系統(tǒng)相比優(yōu)化后的系統(tǒng)作業(yè)執(zhí)行效率的高低是不確定的,這是新系統(tǒng)仍需優(yōu)化的地方。此外還存在2個(gè)待優(yōu)化之處:一是HDFS中元數(shù)據(jù)的分布算法優(yōu)化;二是如何縮短Jobtracker節(jié)點(diǎn)失效后系統(tǒng)恢復(fù)正常的時(shí)間。在大規(guī)模集群中,通過(guò)對(duì)這些地方的優(yōu)化能在一定程度上進(jìn)一步提升MapReduce的可用性及集群性能。這也本文是今后的研究重點(diǎn)。
[1]CHEN Haibo.The research of cloud computing platform credibility enhancement technique[D].Shanghai:Fudan University,2009:1-150 (in Chinese).[陳海波.云計(jì)算平臺(tái)可信性增強(qiáng)技術(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).[柳敬.云計(jì)算平臺(tái)的成本效用研究 [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). [玄吉.云計(jì)算中對(duì)于MapReduce調(diào)度機(jī)制的研究與改進(jìn) [D].長(zhǎng)春:吉林大學(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)化及改進(jìn) [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). [陶韜.云計(jì)算環(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).[王鵬.云計(jì)算的關(guān)鍵技術(shù)與應(yīng)用實(shí)例 [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).[吳偉.海量存儲(chǔ)系統(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——開(kāi)源云計(jì)算平臺(tái)[M].北京:北京郵電大學(xué)出版社,2011:95-101.]