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