張?chǎng)? 譚海
摘要:HDFS(Hadoop Distributed File System)是目前面向云計(jì)算應(yīng)用最為廣泛的分布式文件系統(tǒng),然而其面對(duì)海量小文件存儲(chǔ)場(chǎng)景時(shí)其存在Namenode開銷大,讀寫效率不理想等問(wèn)題?;诖颂岢鲆环NHDFS小文件讀寫優(yōu)化算法FMEA(File Merging and name-Encoding Algorithm)??紤]文件存儲(chǔ)的目錄結(jié)構(gòu)將小文件合并為大文件存儲(chǔ),分配塊內(nèi)file id,與Namenode分配的block id構(gòu)成二元組唯一表示該文件,編碼生成邏輯文件名并建立塊內(nèi)索引,提高小文件訪問(wèn)效率。實(shí)驗(yàn)結(jié)果表明,F(xiàn)MEA有效地降低了Namenode的內(nèi)存開銷,提高了小文件的讀寫效率,此方案適用于具有海量小文件的云存儲(chǔ)系統(tǒng)。
關(guān)鍵詞: HDFS;小文件;FMEA;文件合并;文件名編碼
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):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ù)的存儲(chǔ)與處理上表現(xiàn)優(yōu)異,其運(yùn)行在多臺(tái)計(jì)算機(jī)上,通過(guò)某種方式相互通信從而將集群內(nèi)所有存儲(chǔ)空間資源整合、虛擬化并對(duì)外提供文件訪問(wèn)服務(wù)。HDFS[2]作為Hadoop的分布式文件系統(tǒng),通過(guò)運(yùn)行在廉價(jià)商業(yè)機(jī)器上的多個(gè)節(jié)點(diǎn)之間的協(xié)同工作實(shí)現(xiàn)了高性能、高可用性以及動(dòng)態(tài)的負(fù)載均衡,消除了單點(diǎn)故障以及性能瓶頸,具有高可靠性、高擴(kuò)展性、高效性、高容錯(cuò)性、經(jīng)濟(jì)性等諸多優(yōu)點(diǎn)。
2 HDFS海量小文件存取問(wèn)題
HDFS采用主從式架構(gòu),由一個(gè)Namenode和多個(gè)Datanode組成,其中Namenode負(fù)責(zé)管理文件系統(tǒng)的元數(shù)據(jù),Datanode負(fù)責(zé)數(shù)據(jù)塊的實(shí)際存儲(chǔ)[3]。由于所有文件系統(tǒng)的元數(shù)據(jù)均存放于Namenode內(nèi)存中,因此存儲(chǔ)文件的數(shù)目受限于Namenode的內(nèi)存大小[4];此外,HDFS適用于高吞吐量的文件存儲(chǔ),而不適合低時(shí)間延遲的訪問(wèn),同時(shí)存入million的文件要幾個(gè)小時(shí);HDFS中文件以數(shù)據(jù)塊的形式存儲(chǔ),其默認(rèn)塊大小為64M,這樣每個(gè)小文件都至少占用一個(gè)塊[5]。因此,由于其本身的架構(gòu)設(shè)計(jì)缺陷及大數(shù)據(jù)對(duì)于存儲(chǔ)能力的要求不斷攀升,HDFS并不適合大量小文件的存儲(chǔ)[6]。
針對(duì)以上問(wèn)題,本文提出了一種基于目錄結(jié)構(gòu)的小文件合并優(yōu)化讀寫策略,主要包含三個(gè)方面的內(nèi)容:(1)將小文件合并為大文件,減少HDFS中文件的數(shù)目,提高存取效率。(2)將文件所在塊的block id及塊內(nèi)file id編碼生成邏輯文件名,降低Namenode內(nèi)存消耗。(3)通過(guò)對(duì)邏輯文件名解碼的方式建立索引,提高小文件的讀取效率。
3 小文件合并及文件名編碼算法 -FMEA
其中ClientServer是對(duì)文件判別、合并、編碼模塊的封裝,負(fù)責(zé)響應(yīng)客戶端的請(qǐng)求、合并小文件、與HDFS交互、邏輯文件名的編碼,同時(shí)還要維護(hù)一個(gè)實(shí)際文件名與邏輯文件名的索引清單。HDFS端負(fù)責(zé)數(shù)據(jù)的實(shí)際存儲(chǔ)。
FMEA包括文件判別、文件合并以及文件編碼三個(gè)過(guò)程。其中文件判別模塊負(fù)責(zé)文件大小類型的識(shí)別,文件合并模塊將小文件進(jìn)行合并并建立塊內(nèi)索引,文件編碼模塊通過(guò)將block id及塊內(nèi)file id編碼生成邏輯文件名并在讀取文件時(shí)進(jìn)行解碼。
文件判別模塊通過(guò)客戶端發(fā)出的文件寫請(qǐng)求判斷其為大文件還是小文件,若是大文件則直接存儲(chǔ)至HDFS,若為小文件則交由文件合并模塊進(jìn)行處理??紤]到所要存儲(chǔ)的文件均具有特定的目錄結(jié)構(gòu),因此依據(jù)目錄結(jié)構(gòu)進(jìn)行小文件合并可以提高文件的讀寫效率。文件合并模塊將傳來(lái)小文件進(jìn)行合并(優(yōu)先處理同一目錄或父目錄下的文件),若合并隊(duì)列數(shù)據(jù)量超過(guò)合并閾值,放入新的隊(duì)列,否則繼續(xù)合并直到超過(guò)閾值。同時(shí)對(duì)塊內(nèi)文件分配file id并建立塊內(nèi)索引blockIndex,其記錄的是每個(gè)HDFS block中存儲(chǔ)的小文件的索引信息。其結(jié)構(gòu)如圖2所示,其中keylen表示key的長(zhǎng)度,占用一個(gè)字節(jié),key是文件的名稱,offset和length表示該文件在塊內(nèi)的偏移量及長(zhǎng)度,占用四個(gè)字節(jié)。blockIndex文件對(duì)于Namenode而言是透明的,與對(duì)應(yīng)的block一起傳輸,并加載在Datanode內(nèi)存中,并不占用Namenode的內(nèi)存。
5 結(jié)束語(yǔ)
本文針對(duì)HDFS在海量小文件存儲(chǔ)上存在的問(wèn)題提出了一種小文件合并及文件名編碼優(yōu)化策略-FMEA。將小文件依據(jù)目錄結(jié)構(gòu)合并成一個(gè)大文件存儲(chǔ),將file id及block id編碼生成邏輯文件名,同時(shí)建立塊內(nèi)索引blockIndex提高文件的讀取速率。通過(guò)實(shí)驗(yàn)驗(yàn)證FEMA解決了存儲(chǔ)海量小文件時(shí)Namenode內(nèi)存開銷過(guò)大的問(wèn)題,且有效地提高了HDFS上小文件的讀寫效率。
參考文獻(xiàn):
[1] 劉智慧,張泉靈.大數(shù)據(jù)技術(shù)研究綜述[J].浙江大學(xué)學(xué)報(bào)(工學(xué)版),2014,48(6):957-972.
[2] 郝樹魁.Hadoop HDFS和MapReduce架構(gòu)淺析[J].郵電設(shè)計(jì)技術(shù),2012(7):37-42.
[3] 侯建,帥仁俊,侯文.基于云計(jì)算的海量數(shù)據(jù)存儲(chǔ)模型[J].通信技術(shù),2011,44(5):163-165.
[4] 付東華. 基于HDFS的海量分布式文件系統(tǒng)的研究與優(yōu)化[D].北京郵電大學(xué),2012.
[5] 洪旭升,林世平.基于MapFile的HDFS小文件存儲(chǔ)效率問(wèn)題[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2012,21(11):179-182.
[6] 張海,馬建紅.基于HDFS的小文件存儲(chǔ)與讀取優(yōu)化策略[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2014,23(5):167-171.
【通聯(lián)編輯:光文玲】