劉毅
摘 要:隨著Hadoop平臺的日益完善,其應(yīng)用范圍越來越普及,但仍然存在諸多影響性能的問題,比如調(diào)度算法中Hadoop配置對象開銷大、MapReduce階段中排序?qū)ο蟮男蛄谢胺葱蛄械母唛_銷問題。本文針對以上問題,提出解決方案。
關(guān)鍵詞:Hadoop云平臺;優(yōu)化策略
1 研究背景
由于具備低成本和前所未有的高擴展性,Hadoop已被公認(rèn)為是新一代的大數(shù)據(jù)處理平臺。Hadoop正帶來了新一輪的數(shù)據(jù)革命。雖然hadoop的應(yīng)用價值已得到廣泛認(rèn)可,但其有諸多問題依然制約著hadoop的發(fā)展,優(yōu)化hadoop性能主要可以從以下方面著手:
1.1 應(yīng)用程序優(yōu)化
考Hadoop云平臺優(yōu)化策略研究高效率的應(yīng)用程序。
1.2 Hadoop參數(shù)優(yōu)化
這種優(yōu)化方法要結(jié)合操作協(xié)同層面的調(diào)優(yōu),對hadoop系統(tǒng)的諸多配置參數(shù)進行優(yōu)化調(diào)整,使hadoop作業(yè)運行速度更快。
1.3 系統(tǒng)實現(xiàn)優(yōu)化
這是源碼級的優(yōu)化,針對hadoop框架及實現(xiàn)機制中不合理的地方進行優(yōu)化,優(yōu)化難度大,效果也比較明顯。
本文主要針對hadoop存儲及系統(tǒng)實現(xiàn)中的幾種高開銷問題進行了研究并提出了改進措施。
2 存在的問題
2.1 Hadoop的Configuration開銷大
Hadoop的Configuration的配置需要花費大量的時間,hadoop把對象的信息按照hashmap的方式存在于一個xml的配置文件中,讀取、解壓、分析均來自這一個磁盤的xml文件,這嚴(yán)重影響了IO性能,另外當(dāng)取對象時需要去調(diào)用get()方法,而get()方法的參數(shù)會也會引起正則表達式計算和變量替換,這也需要耗費資源。如果對多個對象讀取,上面的步驟通過循環(huán)語句去實現(xiàn)的話,性能更是將大打折扣。當(dāng)對象很多的情況下hadoop花費30%用來配置對象。
2.2 中間壓縮結(jié)果包含很多無用數(shù)據(jù)
spill線程中的壓縮和解壓縮操作會消耗消耗了大量時間,并且中間結(jié)果是臨時的。如果使用lz4方法取代lzo level 3,可以減少了30%多的中間數(shù)據(jù),并使其能被更快地讀取。
2.3 hadoop中對對象序列化和反序列化消耗太高
對對象的序列化和反序列化是Hadoop Job中開銷最高的操作,特別是對于那些進場使用并且復(fù)雜、非主鍵的key。在hadoop中需要將兩個對象進行比較,通常的做法是對這些對象反序列化后再進行比較,但是反序列化是一個耗時的工程。下圖1是極端情況下通過java-xprof工具檢測得到的結(jié)果。
3 解決方法
傳統(tǒng)的數(shù)據(jù)讀寫是按照row-oriented方式讀寫,也就是順序讀取存儲,這樣的方式優(yōu)點是讀寫相對容易速度也相對較快,但缺點也是相當(dāng)明顯的就是每次讀取都讀寫了一些無用的數(shù)據(jù),并且文件的存儲量也相對教大。傳統(tǒng)存儲的抽象圖如圖2和圖3所示。
解決方法是將record順序存儲的方式改為面向列的數(shù)據(jù)格式。它遵循“先按列劃分,再垂直劃分”的設(shè)計理念。當(dāng)查詢過程中,針對它并不關(guān)心的列時,它會在IO上跳過這些列。也就是按需在磁盤上存取,這種面向列的數(shù)據(jù)讀取方式被稱為Parquet,下圖4和圖5說明了這種存取方式。
對比圖2和圖3由可以看出Parquet是面向列的存儲,它使得同類型的字段被順序排在一起。那么這種存儲有什么好處呢,好處就是按列存儲,可以有效地進行列投影,并且在進行反序列化的時候可以只反序列化需要的列。這樣就大大縮減了因為反序列化消耗的時間,除此之外,存儲的文件也會相應(yīng)的減小很多,可以達到原來文件的一半。圖6是了采用面向列存儲后對某一列投影的示例圖。
下圖7是采用Parquet技術(shù)后,對比傳統(tǒng)存儲方式,使用java-xprof技術(shù)對hadoop運行效率做了一個跟蹤對比,從圖中可以看出當(dāng)只有1字段時,Parquet存儲方式是傳統(tǒng)基礎(chǔ)速度的3倍,當(dāng)有10字段的時候是傳統(tǒng)技術(shù)的1.5倍,速度提高明顯。
4 總結(jié)
本文針對hadoop性能調(diào)優(yōu)三種方法中的存儲及系統(tǒng)實現(xiàn)進行了研究分析,提出了將row-oriented存儲改進為Parquet存儲,實驗證明改為面向列的存儲對系統(tǒng)性能的提高是有效的,但是從圖7中可以看出隨著列的增加,這種性能優(yōu)勢在降低,后續(xù)將針對這一情況進行深入的研究,完善這種技術(shù)。
參考文獻
[1]劉鵬.云計算(第二版)[M].北京:電子工業(yè)出版社,2011.
[2]淺析Hadoop文件格式.[EB/OL].http://www.infoq.com/cn/articles/hadoop-file-format,2012-5-28.
[3]探究提高Hadoop穩(wěn)定性與性能的方法 [EB/OL].http://dongxicheng.org/mapreduce/how-to-improve-hadoop-stablility-and-performance/,2013-12-29.
[4]王宏宇.hadoop平臺在云計算中的應(yīng)用[J].軟件,2011,(4):36-39.
[5]黃曉云.基于HDFS的云存儲服務(wù)系統(tǒng)研究[D].大連海事大學(xué),2010.
[6]王永洲.基于HDFS的存儲技術(shù)的研究[D].南京郵電大學(xué),2013.
[7]高薊超.Hadoop平臺存儲策略的研究與優(yōu)化[D].北京交通大學(xué),2012.