彭建烽,魏文國,鄭東煒
(廣東技術(shù)師范學(xué)院電子與信息學(xué)院,廣東廣州 510665)
基于Hadoop的海量小文件合并的研究與設(shè)計
彭建烽,魏文國,鄭東煒
(廣東技術(shù)師范學(xué)院電子與信息學(xué)院,廣東廣州 510665)
基于Hadoop海量小文件合并的策略研究,一方面為了減輕NameNode的元數(shù)據(jù)量,利用Eclipse開發(fā)工具實現(xiàn)了Har、HBase、SequenceFile三種主流合并方案對海量小文件的合并;另一方面分析這三種主流合并方案在不同場景下性能以及應(yīng)用方面的優(yōu)劣,進而為海量小文件在Hadoop上的存儲提供一些有價值的參考.
Hadoop;HDFS;小文件;元數(shù)據(jù);Har;HBase;SequenceFile
Hadoop分布式數(shù)據(jù)存儲和處理框架憑借其高效、可靠、高容錯等優(yōu)點,漸漸成為了炙手可熱的大數(shù)據(jù)存儲和處理工具.Hadoop分布式文件系統(tǒng)(HDFS)是Hadoop的核心部分,它所具有的兩類節(jié)點以管理者-工作者的模式運行,即單一NameNode(管理者)和若干個DataNode(工作者).NameNode負責(zé)管理文件系統(tǒng)的命名空間,DataNode作為系統(tǒng)的工作節(jié)點,它們根據(jù)需要存儲并檢索數(shù)據(jù)塊(受客戶端或NameNode調(diào)度),并且定期向NameNode發(fā)送它們所存儲的塊列表[1].
但HDFS并不適合存儲海量小文件,主要因為NameNode將文件系統(tǒng)的元數(shù)據(jù)放在內(nèi)存中,整個系統(tǒng)的文件數(shù)目受到NameNode內(nèi)存大小的限制.根據(jù)經(jīng)驗,每個文件、目錄和數(shù)據(jù)塊的存儲信息大約占150字節(jié).舉例來說,如果有一百萬個文件,且每個文件占一個數(shù)據(jù)塊,那至少需要300MB的內(nèi)存.盡管存儲上百萬個文件是可行的,但是存儲數(shù)十億個文件就超出了當(dāng)前硬件的能力[1].如今,Hadoop存儲海量小文件已成為了大數(shù)據(jù)領(lǐng)域的熱點問題.
解決Hadoop上海量小文件的存儲問題可以歸結(jié)為兩類:HDFS自身提供的解決方案和針對不同的應(yīng)用場景采取特定的優(yōu)化方案.
文獻[2-4]是HDFS自身提供的解決方案. Har方案執(zhí)行MapReduce任務(wù)將HDFS中的大量小文件合并成大文件,以此減少元數(shù)據(jù)量,不足之處在于歸并的過程耗時較長,且隨機讀取小文件需要額外訪問一層索引,導(dǎo)致訪問速度可能更慢[2].SequenceFile方案工作原理是采取keyvalue鍵值對存儲合并后的小文件,key是小文件名,value是對應(yīng)的內(nèi)容.但該方案不適合低延時的隨機訪問,因為每次讀取小文件都需要遍歷整個大的文件[3].MapFile方案是在SequenceFile方案基礎(chǔ)上進行優(yōu)化的,增添按key排序、有索引的功能,讀取小文件的性能優(yōu)于后者[4].
文獻[5-7]根據(jù)不同應(yīng)用場景采取特定解決方案.文獻[5]在WebGIS系統(tǒng)中,將保存在相鄰地理位置具有相關(guān)性的小文件合并成一個大文件,進而優(yōu)化NameNode的內(nèi)存開銷,同時為合并后的小文件建立索引,進一步提高小文件的訪問速度.文獻[6]認為Bluesky系統(tǒng)缺乏考慮ppt之間的相關(guān)性和預(yù)存取機制,一方面將同屬于一個課件的ppt文件合并成一個大文件;另一方面建立索引文件和數(shù)據(jù)文件的預(yù)取機制,提高文件的訪問速度.文獻[7]將NameNode中的元數(shù)據(jù)遷移到集群的數(shù)據(jù)庫中,發(fā)揮關(guān)系型數(shù)據(jù)庫的讀寫性能快的優(yōu)勢,實現(xiàn)對元數(shù)據(jù)快速讀??;同時將塊校驗工作轉(zhuǎn)交到元數(shù)據(jù)存儲集群中,進一步減輕NameNode的負載壓力.
針對當(dāng)前眾多小文件合并方案雖能在一定程度上解決文件合并所帶來的性能問題,但都不具備很好的通用性,缺乏對幾種不同合并方案的綜合性分析和總結(jié).因此,本文對當(dāng)前三種流行的Har、HBase、SequenceFile合并方案進行綜合性的研究,分析這三種解決方案在不同場景下的性能以及應(yīng)用方面的優(yōu)劣,為解決小文件問題提供一些有價值的參考.
Har是一種特殊的檔案格式,它在HDFS上再建立一層文件系統(tǒng),通過在HDFS文件索引的基礎(chǔ)上再添加一個索引,即主索引記錄了這些Har索引,而Har索引則記錄了文件數(shù)據(jù)的信息和內(nèi)容,從而實現(xiàn)歸檔合并文件.Har方式通過減少NameNode元數(shù)據(jù)的條數(shù),將海量的小文件歸檔為少量或者一個大文件,有效地提高了網(wǎng)絡(luò)吞吐量,使得元數(shù)據(jù)減少了對內(nèi)存的占用和消耗,從而緩解了NameNode壓力.但這種方式不足之處在于不僅要讀取HDFS上的索引,還要讀取Har的索引,從而對數(shù)據(jù)文件進行加載,效率比原來的直接存放低.
HBase是一個分布式、面向列的開源數(shù)據(jù)庫,HBase表的數(shù)據(jù)被分割成多個Region,是分布式存儲的最小單元,分別由HBase集群中的RegionServer所管理,主節(jié)點NameNode有一個HMaster,負責(zé)管理集群中DataNode節(jié)點的HRegionServer,每一個HRegionServer存放客戶端提交的數(shù)據(jù),即分布式存儲的最小單元Region,它是由一個或多個HSTORE組成的,而一個HSTORE保存一個列族,每個HSTORE又由一個MEMSTORE和多個Hfile組成.HFile是只讀的,一旦創(chuàng)建就不可修改.當(dāng)出現(xiàn)多個HFile的時候,就會進行HFile合并,而如果HFile大小到達一定閾值之后就會觸發(fā)split操作,這個由HRigionServer檢測是否達到閾值,將當(dāng)前Region分割成兩個Region,再由HMaster分配給其他server,從而保證了I/O讀取的高性能.但不足之處在于HBase只是適合大量稀疏數(shù)據(jù).
SequenceFile是一種存儲大量二進制鍵值對數(shù)據(jù)文件格式,用來作為小文件的容器,從而提高MapReduce處理數(shù)據(jù)的效率.SequenceFile將小文件合并成一個格式為SEQ的序列大文件,作為MapReudce的輸入輸出.此外,SequenceFile提供三種基于None、RECORD、BLOCK鍵值對壓縮方式,SequenceFile不僅從源頭解決了小文件過多導(dǎo)致元數(shù)據(jù)消耗大量內(nèi)存的問題,而且提高了MapReduce任務(wù)處理速度,壓縮還能減少空間的占用,但是不足在于SequenceFile不支持追加,不能往里面添加數(shù)據(jù).
4.1 實驗環(huán)境
實驗環(huán)境搭建了5個節(jié)點的Hadoop集群,每個節(jié)點的配置為:四核Intel Core CPU,主頻3.6GHz,內(nèi)存4GB,1TB硬盤空間,其中一臺機器作為NameNode,其余四臺作為DataNode.每臺節(jié)點安裝的操作系統(tǒng)為Ubuntu 12.04,Hadoop版本為Hadoop-2.6.3,JDK版本為1.8.0_73.實驗用到的數(shù)據(jù)類型為txt格式文檔、jpg格式圖片、mp3音頻文件,jpg格式圖片的大小分布在0~200KB,大小2MB到10MB的txt文檔和mp3音頻文件分別占各自數(shù)據(jù)總量的80.3%、93.7%.
4.2 實驗分析
實驗1通過上傳2000、4000、6000、8000、10000個小文件,對原始HDFS、Har的NameNode的內(nèi)存使用情況進行了測試.結(jié)果如圖1所示.
圖1 NameNode的內(nèi)存使用大小對比
圖1的實驗結(jié)果表明,Har能顯著降低NameNode的內(nèi)存開銷,而且隨著小文件數(shù)量的增多,Har的優(yōu)勢更加地明顯.這是因為Har將多個小文件合并成大文件能有效地減少NameNode元數(shù)據(jù)量,使得客戶端在NameNode檢索元數(shù)據(jù)時變得更快,從而提高訪問速度.
實驗2采用10000個小文件,測試原始HDFS和HBase合并后小文件4次順序讀取的耗時開銷,實驗結(jié)果如圖2所示.
圖2 原始HDFS、HBase合并順序讀取時間對比
通過計算,最終HBase順序讀取平均時間是原始HDFS的1/1.61,HBase合并后順序讀取性能優(yōu)于原始HDFS.這是因為HBase合并會提高I/O性能,檢索速度變快.在實際應(yīng)用環(huán)境中數(shù)據(jù)量更大,差異也會更加明顯,但是這種方式的合并并不能隨意使用,否則會引起阻塞,應(yīng)該在HBase集群空閑時間調(diào)用.
實驗3通過對1000個txt格式文檔分別采用直接讀取文件方式、SequenceFile合并再讀取然后進行詞頻統(tǒng)計,實驗共進行4次,每次采用不同內(nèi)容的txt文檔.測試原始HDFS和SequenceFile合并后讀取全部txt文檔的耗時開銷.
實驗發(fā)現(xiàn)進行詞頻統(tǒng)計需要讀取文件時,SequeceFile合并后產(chǎn)生的單個序列文件再進行一次讀取平均只用了約12秒,而普通文本的全部讀取約12000秒,SequeceFile合并后的全部讀取時間是原始HDFS讀取耗時的1/1000左右.顯然對于txt文檔而言,先將其采取SequeceFile合并再一次讀取進行詞頻統(tǒng)計的效率要遠遠高于普通文本的多次讀取.
本文基于Hadoop海量小文件的存儲問題,測試并總結(jié)三種合并方案在不同場景下的性能以及應(yīng)用方面的優(yōu)劣.Har合并能顯著減少NameNode節(jié)點上的元數(shù)據(jù)量,減輕NameNode內(nèi)存開銷,且Har合并最為常用,適用于眾多的文件格式.HBase主要對序列化到磁盤的文件進行合并,以此達到提高小文件檢索速度;而且能提高復(fù)雜環(huán)境下數(shù)據(jù)檢索的速度,但是需要根據(jù)實際生產(chǎn)情況進行配置才能達到很好的效果.SequenceFile針對的是數(shù)據(jù)文件的合并,從而快速提高MapReuce作業(yè)對數(shù)據(jù)的讀取,適用于用于數(shù)據(jù)分析的應(yīng)用,例如天氣預(yù)測、用戶手機流量統(tǒng)計、詞頻統(tǒng)計等應(yīng)用.
[1]tom white.Hadoop權(quán)威指南(第三版)[M]北京:清華大學(xué)出版社,2015.2.
[2]HadoopArchives[OL].http://hadoop.apache.org/docs/ r-1.2.1/hadoop_archives.html.
[3]SequenceFileWiki[OL].http://wiki.apache.org/hadoop/ SequenceFile.
[4]Mapfiles[OL].http://hadoop.apache.org/common/docs /current/api/org/apache/hadoop/io/MapFile.html.
[5]Liu,Xuhui,et al.Implementing WebGIS on Hadoop: A case study of improving small file I/O performance on HDFS[C].2009IEEE International Conference on Cluster ComputingandWorkshops.IEEE,2009.
[6]Dong B,et al.A novel approach to improving the efficiency of storing and accessing small files on hadoop: a case study by powerpoint files[C].Services Computing(SCC),2010IEEEInternationalConferenceon. IEEE,2010.
[7]馬志強,楊雙濤,閆瑞,張澤廣.SQL-DFS:一種基于HDFS的海量小文件存儲系統(tǒng)[J].北京工業(yè)大學(xué)學(xué)報,2016.01.
[責(zé)任編輯:王曉軍]
Research and Design of Massive Small File Merging Based on Hadoop
PENG Jianfeng,WEI Weiguo,ZHENG Dongwei
(Guangdong Polytechnic Normal University,Guangzhou Guangdong 510665)
The research is based on consolidation of the massive small files storage on Hadoop.On the one hand,in order to reduce the metadata footprint in memory,the different solutions of Har,HBase and sequence were combined by using Eclipse development tools.On the other hand,we analysed the advantages and disadvantages of the performance and application of the three massive file merging solutions,and provided some valuable reference for the storage of massive small files on Hadoop.
Hadoop;HDFS;Small files;Metadata;Har;HBase;SequenceFile
TP 391
A
1672-402X(2016)11-0040-03
2016-05-20
廣東省公益研究與能力建設(shè)專項資金(2014A010103032)和廣東省科技型中小企業(yè)技術(shù)創(chuàng)新專項資金項目(2016A010120010、2014A010101109、2014A010101092)資助.
彭建烽(1991-),男,廣東湛江人,2015級碩士研究生.研究方向:網(wǎng)絡(luò)信息技術(shù).
魏文國(1968-),男,湖北公安人,博士,廣東技術(shù)師范學(xué)院教授,研究方向:計算機網(wǎng)絡(luò)及其應(yīng)用.