周揚(yáng) 張恒生
摘要:MapReduce計(jì)算框架已被廣泛用于大規(guī)模數(shù)據(jù)分析的應(yīng)用。雖然它具有彈性的可擴(kuò)展性和細(xì)粒度的容錯(cuò)系統(tǒng),然而性能卻并不令人滿意。MapReduce可以通過(guò)分配更多的計(jì)算節(jié)點(diǎn)來(lái)實(shí)現(xiàn)更好的性能,但是,這種做法并不符合成本效益。用戶渴望MapReduce在提供彈性的可擴(kuò)展性和細(xì)密度容錯(cuò)的同時(shí),可以具有更高的計(jì)算效率。該文提出了一種動(dòng)態(tài)優(yōu)化map階段排序性能的方法,并進(jìn)行了測(cè)試,測(cè)試結(jié)果表明,該方法能夠提升MapReduce的基準(zhǔn)測(cè)試性能。
關(guān)鍵詞:Hadoop;MapReduce;排序;性能優(yōu)化;動(dòng)態(tài)
中圖分類號(hào):TP302.7 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2014)07-1410-03
1 介紹
隨著物聯(lián)網(wǎng)、社交網(wǎng)絡(luò)等新的互聯(lián)網(wǎng)技術(shù)的發(fā)展,數(shù)據(jù)被大量產(chǎn)生。如何從海量數(shù)據(jù)中獲得有用的信息,為用戶提供好的用戶體驗(yàn),增強(qiáng)企業(yè)的競(jìng)爭(zhēng)力,這對(duì)海量數(shù)據(jù)處理來(lái)說(shuō)是一個(gè)挑戰(zhàn)。目前MapReduce計(jì)算框架[1]已成為海量數(shù)據(jù)處理的便利工具,它提供了一個(gè)特定的編程框架,并且對(duì)用戶封裝了計(jì)算的分布式并行、系統(tǒng)的擴(kuò)展性和容錯(cuò)性。
Hadoop[2]是根據(jù)MapReduce架構(gòu)實(shí)現(xiàn)的一個(gè)開(kāi)源系統(tǒng),并逐漸成為業(yè)界應(yīng)用的標(biāo)準(zhǔn)。一些企業(yè)使用Hadoop完成網(wǎng)頁(yè)索引、數(shù)據(jù)挖掘、日志文件分析、財(cái)務(wù)分析、科學(xué)模擬以及生物信息學(xué)的研究。然而Hadoop處理數(shù)據(jù)的性能卻難以令人滿意,人們對(duì)它的性能做了很多研究與改進(jìn)方案,包括對(duì)分布式文件系統(tǒng)HDFS的性能研究與提升[3],Job參數(shù)的自動(dòng)優(yōu)化[4],Task調(diào)度策略的優(yōu)化[5],等。這些優(yōu)化方案都是通過(guò)對(duì)系統(tǒng)資源進(jìn)行更合理的利用來(lái)提高M(jìn)apReduce計(jì)算框架的性能。然而經(jīng)過(guò)對(duì)Hadoop系統(tǒng)map階段排序流程的研究后,我們發(fā)現(xiàn),在相同的系統(tǒng)資源利用率的情況下,通過(guò)調(diào)整一些排序參數(shù),可以有效提高map階段的性能。
本文提出并實(shí)現(xiàn)了一種動(dòng)態(tài)優(yōu)化map階段排序性能的方法,能夠提升MapReduce的基準(zhǔn)測(cè)試性能。使用wordcount算法和Terasort算法進(jìn)行了測(cè)試,測(cè)試結(jié)果表明,該動(dòng)態(tài)優(yōu)化方法可以提高map階段的性能15~20%。
本文的組織如下,第二節(jié)介紹MapReduce的工作原理,第三節(jié)分析map階段的排序流程,并給出動(dòng)態(tài)優(yōu)化排序性能的方法,第四節(jié)給出了測(cè)試結(jié)果與分析,最后給出結(jié)論。
2 MapReduce工作原理
MapReduce是一種編程模型,用于大規(guī)模數(shù)據(jù)集的并行運(yùn)算。它借用函數(shù)式編程語(yǔ)言里的兩個(gè)概念"Map"和"Reduce",來(lái)約束計(jì)算的并行模型。一個(gè)典型的MapReduce作業(yè)包括3個(gè)階段:
1)準(zhǔn)備階段
當(dāng)用戶將作業(yè)提交給JobTracker進(jìn)程后,JobTracker根據(jù)用戶的作業(yè)配置參數(shù)以及處理數(shù)據(jù)的規(guī)模,生成若干個(gè)獨(dú)立的“map”任務(wù)和“reduce”任務(wù)。這些任務(wù)將會(huì)在不同的TaskTracker節(jié)點(diǎn)上執(zhí)行,從而有效地利用集群的資源來(lái)提高作業(yè)的執(zhí)行效率。
2)map階段
當(dāng)TaskTracker有空閑的資源時(shí),它會(huì)從JobTracker請(qǐng)求任務(wù)來(lái)執(zhí)行。JobTracker會(huì)優(yōu)先調(diào)度“map”任務(wù)給TaskTracker節(jié)點(diǎn)。若TaskTracker請(qǐng)求到一個(gè)新的“map”任務(wù)時(shí),它會(huì)從HDFS中獲取輸入數(shù)據(jù)(一個(gè)文件分片)并啟動(dòng)一個(gè)JVM虛擬機(jī)來(lái)執(zhí)行這個(gè)“map”任務(wù)。
“map”任務(wù)的執(zhí)行過(guò)程首先是從輸入數(shù)據(jù)中抽取一條記錄,然后對(duì)該記錄應(yīng)用用戶定義的處理代碼(即用戶的map函數(shù)),處理結(jié)果的記錄將寫入內(nèi)存。當(dāng)處理結(jié)果的記錄達(dá)到一定數(shù)目后,會(huì)進(jìn)行快速排序;當(dāng)處理結(jié)果的記錄占用內(nèi)存達(dá)到一定的閾值或者輸入數(shù)據(jù)全部處理完畢,會(huì)對(duì)快速排序的結(jié)果做一次合并排序并進(jìn)行分區(qū),最后寫到本地的文件系統(tǒng)中。
3)Reduce階段
若TaskTracker請(qǐng)求到一個(gè)新的“reduce”任務(wù)時(shí),它需要從已完成的map任務(wù)所在的TaskTracker節(jié)點(diǎn)上獲取輸入數(shù)據(jù)。首先從JobTracker上監(jiān)聽(tīng)已完成的“map”任務(wù),任務(wù)所在的TaskTracker節(jié)點(diǎn),對(duì)應(yīng)的分區(qū)數(shù)據(jù)在節(jié)點(diǎn)文件系統(tǒng)中的偏移量;然后使用HTTP協(xié)議從TaskTracker節(jié)點(diǎn)上讀取“reduce”任務(wù)所需要的數(shù)據(jù)。
當(dāng)“reduce”任務(wù)獲取了所有“map”任務(wù)的結(jié)果數(shù)據(jù)后,它會(huì)將這些數(shù)據(jù)進(jìn)行一次合并,并對(duì)合并的結(jié)果應(yīng)用用戶定義的處理代碼(即用戶的reduce函數(shù)),處理結(jié)果的記錄將寫入HDFS。
3 Map階段排序優(yōu)化方法
Map階段的數(shù)據(jù)處理過(guò)程是一個(gè)對(duì)輸入數(shù)據(jù)的映射(map)計(jì)算、排序和分區(qū),然后寫入磁盤的過(guò)程。為了方便描述“map”階段的過(guò)程研究,首先介紹一下map階段的數(shù)據(jù)特征和內(nèi)存資源特征。
4 實(shí)驗(yàn)結(jié)果
測(cè)試環(huán)境配置6個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)有2路4核cpu,48G內(nèi)存,12塊1T的sata磁盤。Hadoop版本是CDH4.2.1的MapReduce,測(cè)試軟件是HiBench2.2。在測(cè)試實(shí)驗(yàn)中,首先在保留與n相關(guān)的參數(shù)為初始配置的前提下,通過(guò)調(diào)整其它參數(shù),使算法的性能達(dá)到最優(yōu),即系統(tǒng)資源完全被使用。然后再通過(guò)通過(guò)動(dòng)態(tài)調(diào)整與n相關(guān)的參數(shù),來(lái)測(cè)試該方法對(duì)性能的影響。
MapReduce的wordcount算法的資源瓶頸在于cpu,通過(guò)調(diào)整節(jié)點(diǎn)的map槽數(shù),使節(jié)點(diǎn)的cpu利用率達(dá)到94%,然后再測(cè)試動(dòng)態(tài)優(yōu)化方法對(duì)性能的影響。對(duì)wordcount算法的測(cè)試結(jié)果如圖2所示,在節(jié)點(diǎn)不同的數(shù)據(jù)量下,10G/節(jié)點(diǎn)、30G/節(jié)點(diǎn)和50G/節(jié)點(diǎn)時(shí),對(duì)比測(cè)試了優(yōu)化前后的性能。測(cè)試結(jié)果顯示,優(yōu)化后的性能比優(yōu)化前大約提升20%。
5 結(jié)論
本文提出了一種Hadoop系統(tǒng)map階段的排序動(dòng)態(tài)優(yōu)化方法,通過(guò)對(duì)wordcount的測(cè)試結(jié)果表明,優(yōu)化后的性能可以有效提高map階段性能,從而提升MapReduce的基準(zhǔn)測(cè)試性能。
參考文獻(xiàn):
[1] J. Dean and S. Ghemawat.Mapreduce: Simpli?ed data processing on large clusters[J].In OSDI, pages,2004:137-150.
[2] Apache hadoop. http://hadoop.apache.org/.
[3] 欒亞建,黃翀民,龔高晟,趙鐵柱.Hadoop平臺(tái)的性能優(yōu)化研究[J].計(jì)算機(jī)工程,2010(14).
[4] S. Babu.Towards automatic optimization of mapreduce programs[J].In SoCC,2010:137-142.
[5] Jiang D, Ooi B C, Shi L, et al. The Performance of MapReduce: An In-depth Study[J].PVLDB, 2010,3(1):1207-1218.