張鑫 譚海
摘要:HDFS(Hadoop Distributed File System)是目前面向云計算應用最為廣泛的分布式文件系統(tǒng),然而其面對海量小文件存儲場景時其存在Namenode開銷大,讀寫效率不理想等問題?;诖颂岢鲆环NHDFS小文件讀寫優(yōu)化算法FMEA(File Merging and name-Encoding Algorithm)??紤]文件存儲的目錄結構將小文件合并為大文件存儲,分配塊內file id,與Namenode分配的block id構成二元組唯一表示該文件,編碼生成邏輯文件名并建立塊內索引,提高小文件訪問效率。實驗結果表明,F(xiàn)MEA有效地降低了Namenode的內存開銷,提高了小文件的讀寫效率,此方案適用于具有海量小文件的云存儲系統(tǒng)。
關鍵詞: HDFS;小文件;FMEA;文件合并;文件名編碼
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2019)06-0232-02
FEMA:An Optimizational Algorithm of Small Files Stored and Readed on HDFS
ZHANG Xin,TAN Hai
(Information Engineering,East China University of Technology,Nanchang 330013,China)
Abstract:HDFS (Hadoop Distributed File System) is currently the most widely distributed file system for cloud computing applications. However, it has a problem of large Namenode overhead and unsatisfactory reading and writing efficiency when faced with a large number of small file storage scenarios. Based on this, proposes an HDFS File Merging and name-Encoding Algorithm (FMEA). Consider the file structure of the file storage to merge the small files into large file storage, allocate the file id in the block, and form the binary group with the block id assigned by the Namenode to uniquely represent the file, encode the logical file name and create the blockIndex, and improve the access efficiency of small files. The experimental results show that the FMEA effectively reduces the memory overhead of the Namenode and improves the read and write efficiency of small files. This scheme is suitable for cloud storage systems with a large number of small files.
Key words:HDFS;small files;FMEA;merge files;filename encoding
1 引言
分布式集群文件系統(tǒng)[1]在海量數(shù)據(jù)的存儲與處理上表現(xiàn)優(yōu)異,其運行在多臺計算機上,通過某種方式相互通信從而將集群內所有存儲空間資源整合、虛擬化并對外提供文件訪問服務。HDFS[2]作為Hadoop的分布式文件系統(tǒng),通過運行在廉價商業(yè)機器上的多個節(jié)點之間的協(xié)同工作實現(xiàn)了高性能、高可用性以及動態(tài)的負載均衡,消除了單點故障以及性能瓶頸,具有高可靠性、高擴展性、高效性、高容錯性、經(jīng)濟性等諸多優(yōu)點。
2 HDFS海量小文件存取問題
HDFS采用主從式架構,由一個Namenode和多個Datanode組成,其中Namenode負責管理文件系統(tǒng)的元數(shù)據(jù),Datanode負責數(shù)據(jù)塊的實際存儲[3]。由于所有文件系統(tǒng)的元數(shù)據(jù)均存放于Namenode內存中,因此存儲文件的數(shù)目受限于Namenode的內存大小[4];此外,HDFS適用于高吞吐量的文件存儲,而不適合低時間延遲的訪問,同時存入million的文件要幾個小時;HDFS中文件以數(shù)據(jù)塊的形式存儲,其默認塊大小為64M,這樣每個小文件都至少占用一個塊[5]。因此,由于其本身的架構設計缺陷及大數(shù)據(jù)對于存儲能力的要求不斷攀升,HDFS并不適合大量小文件的存儲[6]。
針對以上問題,本文提出了一種基于目錄結構的小文件合并優(yōu)化讀寫策略,主要包含三個方面的內容:(1)將小文件合并為大文件,減少HDFS中文件的數(shù)目,提高存取效率。(2)將文件所在塊的block id及塊內file id編碼生成邏輯文件名,降低Namenode內存消耗。(3)通過對邏輯文件名解碼的方式建立索引,提高小文件的讀取效率。
3 小文件合并及文件名編碼算法 -FMEA
其中ClientServer是對文件判別、合并、編碼模塊的封裝,負責響應客戶端的請求、合并小文件、與HDFS交互、邏輯文件名的編碼,同時還要維護一個實際文件名與邏輯文件名的索引清單。HDFS端負責數(shù)據(jù)的實際存儲。
FMEA包括文件判別、文件合并以及文件編碼三個過程。其中文件判別模塊負責文件大小類型的識別,文件合并模塊將小文件進行合并并建立塊內索引,文件編碼模塊通過將block id及塊內file id編碼生成邏輯文件名并在讀取文件時進行解碼。
文件判別模塊通過客戶端發(fā)出的文件寫請求判斷其為大文件還是小文件,若是大文件則直接存儲至HDFS,若為小文件則交由文件合并模塊進行處理??紤]到所要存儲的文件均具有特定的目錄結構,因此依據(jù)目錄結構進行小文件合并可以提高文件的讀寫效率。文件合并模塊將傳來小文件進行合并(優(yōu)先處理同一目錄或父目錄下的文件),若合并隊列數(shù)據(jù)量超過合并閾值,放入新的隊列,否則繼續(xù)合并直到超過閾值。同時對塊內文件分配file id并建立塊內索引blockIndex,其記錄的是每個HDFS block中存儲的小文件的索引信息。其結構如圖2所示,其中keylen表示key的長度,占用一個字節(jié),key是文件的名稱,offset和length表示該文件在塊內的偏移量及長度,占用四個字節(jié)。blockIndex文件對于Namenode而言是透明的,與對應的block一起傳輸,并加載在Datanode內存中,并不占用Namenode的內存。
5 結束語
本文針對HDFS在海量小文件存儲上存在的問題提出了一種小文件合并及文件名編碼優(yōu)化策略-FMEA。將小文件依據(jù)目錄結構合并成一個大文件存儲,將file id及block id編碼生成邏輯文件名,同時建立塊內索引blockIndex提高文件的讀取速率。通過實驗驗證FEMA解決了存儲海量小文件時Namenode內存開銷過大的問題,且有效地提高了HDFS上小文件的讀寫效率。
參考文獻:
[1] 劉智慧,張泉靈.大數(shù)據(jù)技術研究綜述[J].浙江大學學報(工學版),2014,48(6):957-972.
[2] 郝樹魁.Hadoop HDFS和MapReduce架構淺析[J].郵電設計技術,2012(7):37-42.
[3] 侯建,帥仁俊,侯文.基于云計算的海量數(shù)據(jù)存儲模型[J].通信技術,2011,44(5):163-165.
[4] 付東華. 基于HDFS的海量分布式文件系統(tǒng)的研究與優(yōu)化[D].北京郵電大學,2012.
[5] 洪旭升,林世平.基于MapFile的HDFS小文件存儲效率問題[J].計算機系統(tǒng)應用,2012,21(11):179-182.
[6] 張海,馬建紅.基于HDFS的小文件存儲與讀取優(yōu)化策略[J].計算機系統(tǒng)應用,2014,23(5):167-171.
【通聯(lián)編輯:光文玲】