宋繼紅,李夢楠,郝得智
摘? 要:從Hadoop分布式文件系統的架構出發,對NameNode節點存在的單點問題進行了分析與研究。在這個前提下,針對單點內存瓶頸問題,提出了一個小文件歸并算法。此算法以Hadoop為基礎,利用Hadoop分布式文件系統的特點,將歸并后生成的大文件序列化到Hadoop分布式文件系統,很好地解決了小文件過多時NameNode單點內存瓶頸問題,并提高了系統的性能和可靠性。
關鍵詞:Hadoop;小文件歸并;分布式文件系統
中圖分類號:TP393.0?????????? 文獻標識碼:A
1?? 引言(Introduction)
如今網絡的飛速發展,數據量的增多,這就要求數據庫能夠具有處理超大規模數據的能力。Hadoop分布式平臺的出現,很好地解決了處理海量數據的難題。Hadoop集群架構有兩個核心的設計,分別是HDFS(Hadoop Distributed File System)和MapReduce[1]。由于HDFS只有一個元數據服務器NameNode,導致HDFS存在單點故障,單點內存不足等問題。本文在分析研究HDFS單點問題的基礎上,針對單點內存瓶頸問題,提出了一種新型的上層歸檔文件系統,用來優化海量小文件的處理,可有效地解決單點內存瓶頸問題。
2?? HDFS架構(HDFS architecture)
Hadoop分布式文件系統(HDFS)是Hadoop分布式平臺的一個核心組件,其設計目的是為了解決超大文件存儲難題[2]。HDFS是由一個主節點和多個子節點構成的主從結構。主節點被稱為名稱節點(NameNode),子節點被稱為數據節點(DataNode)。HDFS的架構圖如圖1所示。
圖1 HDFS架構圖
Fig.1 The architecture diagram of HDFS
名稱節點主要負責管理分布式文件系統中的元數據信息,處理用戶文件訪問操作請求等。而被上傳到Hadoop分布式文件系統中的大數據則保存在數據節點中。通過心跳機制,每隔一段時間數據節點與名稱節點進行信息交互[3]。
Hadoop分布式文件系統包含名稱節點、數據節點、數據塊、數據包等組件。
名稱節點(NameNode)是HDFS的主節點,負責管理并維護整個分布式文件系統的元數據信息,即:FSImage信息和EditLog信息[4]。NameNode又決定了大數據文件與數據塊之間的映射,數據塊與數據節點之間的映射,處理客戶端發來的文件操作訪問請求。
數據節點(DataNode)主要負責存儲數據文件,并且每隔一段時間向主節點發送存儲數據映射列表。
數據塊(Data Block)。分布式文件系統存儲的數據都存儲在數據塊中[5]。上傳的數據文件首先被分割成默認大小64MB的數據塊,然后文件以數據塊的形式存放在不同的DataNode節點上,是分布式文件系統存儲數據的基本單位。為了防止數據塊丟失,每塊默認復制三塊,其中兩個數據塊存儲在一個機架中,另一個數據塊則被存儲在其他的機架中,大大提高了HDFS數據的可用性。
數據包(Data Packet)。在執行寫操作時,需要將上傳的數據先保存在本地目錄中,待累計到系統規定值后才將數據一次寫入到Hadoop分布式文件系統中。這樣,每次上傳的數據稱為一個數據包。
3?? NameNode單點問題分析(NameNode single
point problem analysis)
3.1?? 單點故障
單點故障是指引起系統整體失效的部件,當該部件失效時,會造成整個系統無法工作。Hadoop分布式文件系統由一個主節點和多個子節點構成的。NameNode節點負責管理和維護所有的命名空間和元數據信息,名稱節點主要負責管理分布式文件系統中的元數據信息,處理用戶文件訪問操作請求等。一旦發生主節點故障會使整個系統無法正常工作,這對于使用者來說是災難性的。
3.2?? 性能瓶頸
NameNode節點主要負責管理并維護整個分布式文件系統的元數據信息,處理用戶文件訪問操作請求。每次用戶發出文件訪問操作請求時,NameNode節點都需要響應客戶端的請求[6]。由于HDFS僅有一個名稱節點,當大量客戶端同時發出文件訪問操作請求,單一的名稱節點無法及時一一做出響應,這必然會對HDFS正常運行造成嚴重的影響,是HDFS的性能瓶頸。
3.3?? 內存瓶頸
NameNode節點中保存了整個系統的命名空間,負責管理并維護整個分布式文件系統的元數據信息,即:FSImage信息和EditLog信息。對于每個上傳的文件,NameNode節點會為其自動生成相應的元數據信息,而這些元數據信息會占用少許的主節點內存空間[7]。HDFS適合存儲大數據文件,一般情況下,NameNode節點存儲的元數據信息不會對整個Hadoop集群造成影響。上傳文件后,用戶更多的是與數據節點進行訪問交互,不會對訪問性能造成影響。然而用戶選擇上傳海量的小文件時,元數據節點需要為每個小文件生成對應的元數據信息,這勢必對NameNode單點內存性能造成影響,從而對整個Hadoop集群的擴展性造成影響。一般,當用戶上傳小文件數量達到一億,相應的元數據信息約占主節點20G的存儲空間。若上傳的小文件以指數級增長,HDFS集群將不足以支持海量文件的存儲。同樣,NameNode內存瓶頸嚴重制約了集群的擴展。endprint
目前,Hadoop0.18.0版本引入了HAR(Hadoop archives)技術,它可以將眾多小文件打包成一個大文件進行存儲,減少HDFS中小文件數量,主要解決的是小文件占用大量Namenode內存空間。但是它是一個人工干預的過程,同時既不能夠支持自動刪除原小文件,也不支持追加操作,當有新文件進來以后,需要重新打包。還有一些針對具體問題的小文件解決方案,如WebGIS提出適用于地理信息系統信息存儲機制,和指定存儲格式為PPT格式的解決方案。這些解決方案可以有效解決HDFS單點內存瓶頸問題[8],但均局限于指定的應用環境,不適用其他類型文件的存儲,如海量存儲MP3格式的文件。
針對HDFS單點內存瓶頸問題,本文提出了新型的上層歸檔文件系統,用來優化海量小文件的處理。
4? 對小文件存儲優化的實現(Implementation of
small file storage optimization)
4.1?? 基本思想
上傳小文件前,首先對海量小文件進行預處理,將本地目錄中需要處理的小文件寫入HashMap集合中,同時通過格式轉換生成文件流式集合,其中小文件文件名作為key,文件內容作為value。然后以SequenceFile作為容器,再將HashMap中存儲的海量小文件進行歸檔合并成一個大文件。最后,將合并后的大文件上傳Hadoop服務器序列化存儲在HDFS中,從而緩解了NameNode節點內存瓶頸問題。處理海量小文件流程如圖2所示。
圖2 海量小文件處理
Fig.2 Massive small files processing
4.2?? SmallFilesWrite類的實現
SmallFilesWrite類中,成員變量有兩個,就是String類型的靜態成員變量SOURCE_PATH和TARGET_PATH,SOURCE_PATH變量表示源路徑,即預上傳文件本地目錄路徑。TARGET_PATH表示目標路徑,即上傳到指定Hadoop分布式文件系統路徑。成員方法主要有readFiles方法、file2Bytes方法和main方法。
(1)readFiles方法
上傳小文件前,首先對海量小文件進行預處理,將本地目錄中需要處理的小文件寫入HashMap集合中,其中小文件文件名作為key,文件內容作為value。
首先,在readFiles方法中創建一個File的對象directory,然后調用listFiles方法獲取SOURCE_PATH指定路徑中的文件的內容。將獲取的文件存儲在創建的File[]數組中。最后map對象調用put方法,將讀取的小文件循環寫入到HashMap集合中。這里file[]數組元素調用getName方法獲取文件名,作為Map集合中的key,同時調用file2Bytes方法,將文件內容作為Map集合中的value存儲。
(2)file2Bytes方法
在Hadoop分布式文件系統中,讀寫數據的方式滿足流式讀寫,目的可以提高數據訪問的吞吐量。為支持不同格式小文件合并,編寫了一個file2Bytes方法,該方法的形式參數為String類型的filename,這個參數代表本地目錄中預處理文件的文件名。創建FileInputStream對象fis,對其進行初始化,并拋出異常。然后使用對象fis的available方法,目的使其可以不受阻塞地從此輸入流中讀取(或跳過)的估計剩余字節數。再然后定義一個byte類型的long_buf數組,將本地目錄中的小文件進行格式轉換,轉換成字節流寫入long_buf數組中。這樣讀寫數據的方式滿足流式讀寫,同時解決了不同格式的小文件合并問題。
(3)main方法
main方法實現了將海量小文件進行歸并處理,生成一個大文件,最后將其分布并發存儲到HDFS中。通過遍歷Map,迭代輸出集合中元素;創建Text對象key,BytesWritable對象value,key調用set方法獲取輸出集合中元素的key值,value調用set方法獲取拷貝的文件內容,偏移量及文件長度;返回一個SequenceFile.Writer實例,這里需要創建FileSystem和Path對象,將數據內容寫入path對象,調用append方法完成小文件的追加寫入。實現將海量小文件歸并處理,生成一個大文件。
4.3?? 文件的訪問
自定義一個FileOutputStream文件輸出流對象,指定輸出目錄將需要訪問的文件流式讀出,將讀出的文件返回給需要訪問的用戶。訪問某文件時,首先獲取SmallFilesWrite中HDFS中輸入目錄,創建SequenceFile.Reader對象,通過迭代獲取序列文件名和該文件名所對應的文件。
5?? 結論(Conclusion)
本文針對Hadoop分布式文件系統的單點內存瓶頸問題,提出了采用小文件歸并的優化算法。根據Hadoop存儲數據特點,利用小文件合并大文件,可有效減少元數據的生成,解決了單點內存瓶頸問題。在Hadoop分布式文件系統單點內存瓶頸優化的基礎上,對Hadoop分布式文件系統的性能瓶頸的優化將是本人未來主要研究的內容。
參考文獻(Reference)
[1] Tom White,Hadoop.周敏齊,等,譯.權威指南(第二版)[M].北
京:清華大學出版社,2011.
[2] Chuck Lam.Hadoop.韓冀中,譯.實戰[M].北京:人民郵電出版
社,2011.
[3] 雷萬云,等.云計算:技術、平臺及應用案例[M].北京:清華大
學出版社,2011.
[4] The Apache Software Foundation HDFS ArchitectureGuide[EB/
OL].[2011-05-04].http://hadoop.apache.org/co-mmon/docs/
current/hdfs_design.html.
[5] DANIELN,RICH Wolski,CHRISG,etal.The Eucalyptus
OpenSource Cloud-Computing System[J].IEEE Computer
Society,2009,24(08):124-131.
[6] Venner J. Pro Hadoop[M]. New York:Apress,2009.
[7] Hadoop[EB/OL],http://hadoop.apache.org/.2011.
[8] Grant Mackey,Saba Sehrish,Jun Wang.Improving Metadata
Management for Small Files in HDFS[J].IEEE International
Conference on Cluster Computing and Workshops,2009:1-4.
作者簡介:
宋繼紅(1963-),女,碩士,副教授.研究領域:計算機網絡
通信,計算機網絡遠程控制,嵌入式技術.
李夢楠(1989-),男,碩士生.研究領域:計算機網絡.
郝得智(1989-),男,碩士生.研究領域:計算機控制.endprint
[2] Chuck Lam.Hadoop.韓冀中,譯.實戰[M].北京:人民郵電出版
;?;?;?;?; 社,2011.
[3] 雷萬云,等.云計算:技術、平臺及應用案例[M].北京:清華大
;?;?;?; 學出版社,2011.
[4] The Apache Software Foundation HDFS ArchitectureGuide[EB/
;?;?;?; OL].[2011-05-04].http://hadoop.apache.org/co-mmon/docs/
;?;?;?; current/hdfs_design.html.
[5] DANIELN,RICH Wolski,CHRISG,etal.The Eucalyptus
;?;?; OpenSource Cloud-Computing System[J].IEEE Computer
;?;?;?;?; Society,2009,24(08):124-131.
[6] Venner J. Pro Hadoop[M]. New York:Apress,2009.
[7] Hadoop[EB/OL],http://hadoop.apache.org/.2011.
[8] Grant Mackey,Saba Sehrish,Jun Wang.Improving Metadata
;?; Management for Small Files in HDFS[J].IEEE International
;?;?;?; Conference on Cluster Computing and Workshops,2009:1-4.
作者簡介:
宋繼紅(1963-),女,碩士,副教授.研究領域:計算機網絡
;?;?;?;?;?; 通信,計算機網絡遠程控制,嵌入式技術.
李夢楠(1989-),男,碩士生.研究領域:計算機網絡.
郝得智(1989-),男,碩士生.研究領域:計算機控制.endprint
[2] Chuck Lam.Hadoop.韓冀中,譯.實戰[M].北京:人民郵電出版
;?;?;?;?; 社,2011.
[3] 雷萬云,等.云計算:技術、平臺及應用案例[M].北京:清華大
;?;?;?; 學出版社,2011.
[4] The Apache Software Foundation HDFS ArchitectureGuide[EB/
;?;?;?; OL].[2011-05-04].http://hadoop.apache.org/co-mmon/docs/
;?;?;?; current/hdfs_design.html.
[5] DANIELN,RICH Wolski,CHRISG,etal.The Eucalyptus
;?;?; OpenSource Cloud-Computing System[J].IEEE Computer
;?;?;?;?; Society,2009,24(08):124-131.
[6] Venner J. Pro Hadoop[M]. New York:Apress,2009.
[7] Hadoop[EB/OL],http://hadoop.apache.org/.2011.
[8] Grant Mackey,Saba Sehrish,Jun Wang.Improving Metadata
;?; Management for Small Files in HDFS[J].IEEE International
;?;?;?; Conference on Cluster Computing and Workshops,2009:1-4.
作者簡介:
宋繼紅(1963-),女,碩士,副教授.研究領域:計算機網絡
;?;?;?;?;?; 通信,計算機網絡遠程控制,嵌入式技術.
李夢楠(1989-),男,碩士生.研究領域:計算機網絡.
郝得智(1989-),男,碩士生.研究領域:計算機控制.endprint
[2] Chuck Lam.Hadoop.韓冀中,譯.實戰[M].北京:人民郵電出版
;?;?;?;?; 社,2011.
[3] 雷萬云,等.云計算:技術、平臺及應用案例[M].北京:清華大
;?;?;?; 學出版社,2011.
[4] The Apache Software Foundation HDFS ArchitectureGuide[EB/
;?;?;?; OL].[2011-05-04].http://hadoop.apache.org/co-mmon/docs/
;?;?;?; current/hdfs_design.html.
[5] DANIELN,RICH Wolski,CHRISG,etal.The Eucalyptus
;?;?; OpenSource Cloud-Computing System[J].IEEE Computer
;?;?;?;?; Society,2009,24(08):124-131.
[6] Venner J. Pro Hadoop[M]. New York:Apress,2009.
[7] Hadoop[EB/OL],http://hadoop.apache.org/.2011.
[8] Grant Mackey,Saba Sehrish,Jun Wang.Improving Metadata
;?; Management for Small Files in HDFS[J].IEEE International
;?;?;?; Conference on Cluster Computing and Workshops,2009:1-4.
作者簡介:
宋繼紅(1963-),女,碩士,副教授.研究領域:計算機網絡
;?;?;?;?;?; 通信,計算機網絡遠程控制,嵌入式技術.
李夢楠(1989-),男,碩士生.研究領域:計算機網絡.
郝得智(1989-),男,碩士生.研究領域:計算機控制.endprint