趙 鑫,石 龍,張建光,劉 霞,宋振源
?
HDFS在智慧博物館文件存儲(chǔ)系統(tǒng)中的應(yīng)用
趙 鑫a,石 龍b,張建光b,劉 霞b,宋振源a
(衡水學(xué)院 a. 科研處;b. 數(shù)學(xué)與計(jì)算機(jī)科學(xué)學(xué)院,河北 衡水 053000)
隨著對(duì)智慧型博物館的建設(shè),各種文物藏品信息不斷地豐富,形成的海量多媒體數(shù)據(jù)信息也越來越多,這對(duì)文物數(shù)據(jù)存儲(chǔ)管理系統(tǒng)提出了更高要求.針對(duì)數(shù)字博物館中海量多媒體下多維元小文件資源的特點(diǎn),基于Hadoop File System(HDFS)分布式文件系統(tǒng),將大量小文件合并成大文件,并對(duì)元數(shù)據(jù)的讀寫過程進(jìn)行優(yōu)化;根據(jù)不同海量小文件存儲(chǔ)策略,從打包小文件、減少文件個(gè)數(shù)、集中緩存管理等方面優(yōu)化存儲(chǔ)效果.
智慧博物館;海量存儲(chǔ);HDFS分布式系統(tǒng);小文件存儲(chǔ)
現(xiàn)如今伴隨數(shù)據(jù)資源激增,數(shù)據(jù)應(yīng)用模式已經(jīng)從傳統(tǒng)的互聯(lián)網(wǎng)模式轉(zhuǎn)變成云模式和云計(jì)算.其中智慧博物館就是“云計(jì)算+文化遺產(chǎn)”在博物館領(lǐng)域的應(yīng)用.
傳統(tǒng)博物館的數(shù)據(jù)數(shù)量已經(jīng)非常豐富,如今隨著更多的文物被發(fā)掘,以及文化產(chǎn)業(yè)的更加深入發(fā)展,同時(shí)得益于虛擬現(xiàn)實(shí)技術(shù)、三維圖形圖像技術(shù)、特種視效技術(shù)、計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)、立體顯示系統(tǒng)、互動(dòng)娛樂技術(shù)等先進(jìn)技術(shù)的進(jìn)步,博物館擁有了大量的數(shù)據(jù)資源.博物館的數(shù)字藏品信息種類更加豐富多樣,比如有圖片、附屬文字、影像視頻、MP3音頻、三維虛擬實(shí)體成像等.智慧型博物館所蘊(yùn)含的信息量以驚人的速度在增長(zhǎng),龐大的數(shù)據(jù)信息在豐富了博物館的內(nèi)容時(shí),也給海量數(shù)據(jù)存儲(chǔ)系統(tǒng)帶來了很大難題.
因此人們近些年來不斷研究如何提高博物館管理水平并促進(jìn)其發(fā)展,于是將海量博物館數(shù)據(jù)資源整合成宏大的平臺(tái),搞好基礎(chǔ)的數(shù)字典藏建設(shè).
2.1 分布式存儲(chǔ)技術(shù)
2003年谷歌公司設(shè)計(jì)了專門用于存儲(chǔ)海量搜索數(shù)據(jù)的文件系統(tǒng)GFS.而后2006年適合運(yùn)行在通用硬件上的Hadoop分布式文件系統(tǒng)(HDFS)被設(shè)計(jì)成功.分布式文件系統(tǒng)管理方式能夠高效的解決存儲(chǔ)海量數(shù)據(jù)的難題.其優(yōu)勢(shì)如下:使用低價(jià)機(jī)器來部署整個(gè)系統(tǒng),很大程度上縮減了系統(tǒng)搭建成本及后期維護(hù)的費(fèi)用;文件系統(tǒng)不限于一個(gè)服務(wù)器,系統(tǒng)由分布于世界各地任何一個(gè)地方并通過網(wǎng)絡(luò)來傳送數(shù)據(jù)、進(jìn)行通訊的眾多節(jié)點(diǎn)組成.系統(tǒng)可以“發(fā)表”一個(gè)允許其他客戶機(jī)訪問的目錄,一旦被訪問,這個(gè)目錄對(duì)客戶機(jī)來說就像使用本地驅(qū)動(dòng)器一樣,不必了解數(shù)據(jù)的具體存放位置.此外這種分布式的存儲(chǔ)可以均衡數(shù)據(jù)負(fù)載,并通過創(chuàng)建備份數(shù)據(jù)來防止數(shù)據(jù)丟失可能引起的系統(tǒng)癱瘓.另外因?yàn)榉植际酱鎯?chǔ)系統(tǒng)是建立在大量廉價(jià)的機(jī)器基礎(chǔ)之上的,廉價(jià)就代表出錯(cuò)的可能性高,而用于海量存儲(chǔ)的超大集群更是大大增加了出錯(cuò)的可能,所以HDFS本身需要有較強(qiáng)的容錯(cuò)性.
2.2 HDFS概述
盡管目前大數(shù)據(jù)技術(shù)還未形成統(tǒng)一標(biāo)準(zhǔn),但Hadoop分布式系統(tǒng)已經(jīng)成為云計(jì)算平臺(tái)業(yè)界的寵兒.基于Hadoop關(guān)鍵技術(shù)的HDFS,原型參照谷歌公司的GFS文件系統(tǒng),性能比較高效,是一個(gè)非常具有優(yōu)勢(shì)的海量數(shù)據(jù)存儲(chǔ)系統(tǒng),具有很高的服務(wù)可靠性、數(shù)據(jù)的高安全性、良好的易擴(kuò)展性以及相對(duì)于其他分布式文件系統(tǒng)更加完善的生態(tài)環(huán)境,支持其他分布式系統(tǒng),如HBase等.
HDFS采用Master/Slave結(jié)構(gòu),主節(jié)點(diǎn)NameNode包括fsimage、edits、fstime 3部分[1],其中fsimage為元數(shù)據(jù)鏡像文件,用來存儲(chǔ)某個(gè)時(shí)間段內(nèi)的NameNode內(nèi)存元數(shù)據(jù)信息;edits用于放置操作日志文件;fstime保存最后一次checkpoint時(shí)間.主節(jié)點(diǎn)既要維護(hù)文件系統(tǒng)目錄結(jié)構(gòu),還要維護(hù)文件與block的直接關(guān)系,另外也要維護(hù)block與datanode之間關(guān)系.DataNode節(jié)點(diǎn)用于存儲(chǔ)文件、將文件分割成block、復(fù)制副本的功能.Secondary NameNode從NameNode上下載元數(shù)據(jù)信息(fsimage、edits)并把它們合并起來,重新生成new fsimage保存在本地,然后將其推送到NameNode,然后對(duì)NameNode的edits重置.具體結(jié)構(gòu)圖如圖1所示.
圖1 HDFS結(jié)構(gòu)
HDFS使用過程中存在很多優(yōu)點(diǎn):
1) 超大文件的處理,這里的超大文件通常是指100 MB、100 TB大小的文件.目前在實(shí)際應(yīng)用中,HDFS已經(jīng)能用來存儲(chǔ)管理PB級(jí)的數(shù)據(jù)了.
2) 流式的訪問數(shù)據(jù),HDFS的設(shè)計(jì)建立在更多地響應(yīng)“一次寫入、多次讀寫”任務(wù)的基礎(chǔ)上.這意味著一個(gè)數(shù)據(jù)集一旦由數(shù)據(jù)源生成,就會(huì)被復(fù)制分發(fā)到不同的存儲(chǔ)節(jié)點(diǎn)中,然后響應(yīng)各種各樣的數(shù)據(jù)分析任務(wù)請(qǐng)求.在多數(shù)情況下,分析任務(wù)都會(huì)涉及數(shù)據(jù)集中的大部分?jǐn)?shù)據(jù),也就是說,對(duì)HDFS來說,請(qǐng)求讀取整個(gè)數(shù)據(jù)集要比讀取一條記錄更加高效.
3) 廉價(jià)的硬件配置要求,hadoop設(shè)計(jì)對(duì)硬件需求比較低,無需昂貴的高可用性機(jī)器上.
在建設(shè)智慧博物館的過程中,海量多媒體小文件的高效存儲(chǔ)有待提高.然而,如今流行的HDFS等分布式文件系統(tǒng)在高效存儲(chǔ)大文件上雖有出色的表現(xiàn),但是在存儲(chǔ)海量小文件時(shí),卻不盡人意.海量的小文件如果直接應(yīng)用HDFS系統(tǒng)會(huì)存在無法高效存儲(chǔ)的問題:因?yàn)槲募到y(tǒng)的元數(shù)據(jù)放置在Namenod內(nèi)存中,所以系統(tǒng)中容放的文件數(shù)目和Namenode的內(nèi)存大小息息相關(guān).當(dāng)讀取的文件越多所需的內(nèi)存也隨之增大,對(duì)于巨大的內(nèi)存要求,以當(dāng)前的硬件水平無法達(dá)到.同時(shí),數(shù)量龐大的小文件頻繁地與元數(shù)據(jù)節(jié)點(diǎn)進(jìn)行交互時(shí)產(chǎn)生的DateNode節(jié)點(diǎn)文件塊報(bào)告檢測(cè)也同樣需要占用NameNode節(jié)點(diǎn)資源.在用戶訪問小文件時(shí),因?yàn)槲募?nèi)容小,所以真正傳輸文件需要的時(shí)間非常少,而因?yàn)榘l(fā)送請(qǐng)求而產(chǎn)生的交互反而占用了系統(tǒng)的較大開銷,從而導(dǎo)致數(shù)據(jù)的訪問效率低下.
3.1 HAR(Hadoop Archive)
Mackey等[2]最早采用Hadoop Archive技術(shù),并被Hadoop 0.18.0版本引入.它是一個(gè)能高效地將小文件放入HDFS塊中的文件存檔文件格式,具體樣式如圖2 HAR文檔結(jié)構(gòu).它能夠?qū)⒍鄠€(gè)小文件打包成一個(gè)后綴為.har文件,這樣減少了文件個(gè)數(shù)(但是文件總體大小并沒有減少,無壓縮),隨之降低了namenode內(nèi)存的使用,并且仍然支持訪問文件透明化.打包后不影響原文件的Map-reduce操作,打包后的文件包括索引(原目錄、文件狀態(tài))和存儲(chǔ)兩部分.
圖2 HAR文檔結(jié)構(gòu)
另外HAR有自己的幾個(gè)特性:
1) 文件夾模糊匹配:在使用hadoop命令查看文件夾的時(shí)候hdsf系統(tǒng)是精確匹配文件夾的,但是在har文件系統(tǒng)中是模糊匹配的.
2) pig讀har文件系統(tǒng)只能指定到具體文件,不能指定到文件夾.
3) hive只能讀到文件夾,讀不到具體的文件.
而且HAR中創(chuàng)建Archive文件要消耗和原文件一樣多的硬盤空間,并且Archive文件不支持壓縮,一旦Archive文件創(chuàng)建了就無法改變.如果要修改Archive文件的內(nèi)容,就需要重新創(chuàng)建Archive文件.所以HAR會(huì)因?yàn)轭l繁地創(chuàng)建海量小文件的歸檔文件而占用大量的機(jī)器資源[3],從而嚴(yán)重影響集群系統(tǒng)性能.
還需要注意的是:因?yàn)閍rchive的開源性,所以其他的fsshell命令也可以在archive上運(yùn)行,這將對(duì)系統(tǒng)的安全性造成影響.
3.2 基于SequenceFile的小文件合并
SequenceFile文件是Hadoop用來存儲(chǔ)二進(jìn)制形式的key-value對(duì)而設(shè)計(jì)的一種平面文件(Flat File)[4].由一系列的二進(jìn)制key/value組成,key為filename,value為file contents,可以將大批小文件合并成一個(gè)大文件.序列文件如圖3所示:
KeyvalueKeyvalue……Keyvalue
SequenceFile中雖然是按文件名(或其他任何值)為鍵,文件內(nèi)容為值來存儲(chǔ)的.但SequenceFile文件并不保證其存儲(chǔ)的key-value數(shù)據(jù)是按照key的某個(gè)順序存儲(chǔ)的,并且讀取時(shí),鍵值還是會(huì)被讀到文件的首行.
進(jìn)入到SequenceFile的所有記錄,都需要根據(jù)一定的hash規(guī)則確定一個(gè)HashKey.相對(duì)而言,記錄塊是比較簡(jiǎn)單的,每個(gè)記錄塊中僅包含塊的大小以及該塊的數(shù)據(jù);元數(shù)據(jù)就相對(duì)而言比較復(fù)雜,其中Metadata size是總體的記錄數(shù),每個(gè)HashKey均可以直接定位到記錄的位置(offset, length, number記載著這些信息).其中需要注意的是,記錄是嚴(yán)格有序的,寫文件需要按照HashKey的順序進(jìn)行寫入,也就是說,不能向該文件中append一條HashKey在當(dāng)前Key之前的數(shù)據(jù),一旦文件寫完成,可能不能再更改.
SequenceFile文件可支持3種壓縮類型:
1) NONE:對(duì)records不進(jìn)行壓縮;
2) 記錄級(jí)別的壓縮;
3) 塊級(jí)別壓縮.前兩種以基于記錄的格式保存(如圖4所示),而第三種使用基于塊的格式(如圖5所示).
頭部記錄記錄…同步記錄…同步記錄
頭部記錄塊…同步塊…同步塊
另外如果采用并行的方式來創(chuàng)建一個(gè)一系列的SequenceFiles可以加快小文件的轉(zhuǎn)換.
3.3 基于DataNode的元數(shù)據(jù)策略
HDFS中的集中化緩存管理是一個(gè)明確的緩存機(jī)制[5],它允許用戶指定要緩存的HDFS路徑.NameNode會(huì)和保存著所需塊數(shù)據(jù)的所有DataNode通信,并指導(dǎo)他們把塊數(shù)據(jù)緩存在off-heap緩存中.
HDFS集中化緩存管理具有許多重大優(yōu)勢(shì):
1) 明確的鎖定可以阻止頻繁使用的數(shù)據(jù)被從內(nèi)存中清除.當(dāng)工作集的大小超過了主內(nèi)存大小(這種情況對(duì)于許多HDFS負(fù)載都是司空見慣的)時(shí),這一點(diǎn)尤為重要.
2) 由于DataNode緩存是由NameNode管理的,所以,在確定任務(wù)放置位置時(shí),應(yīng)用程序可以查詢一組緩存塊位置.把任務(wù)和緩存塊副本放在一個(gè)位置上可以提高讀操作的性能.
3) 當(dāng)塊已經(jīng)被DataNode緩存時(shí),客戶端就可以使用一個(gè)新的更高效的零拷貝讀操作API.因?yàn)榫彺鏀?shù)據(jù)的checksum校驗(yàn)只需由DataNode執(zhí)行一次,所以,使用這種新API時(shí),客戶端基本上不會(huì)有開銷.
4) 集中緩存可以提高整個(gè)集群的內(nèi)存使用率.當(dāng)依賴于每個(gè)DataNode上操作系統(tǒng)的buffer緩存時(shí),重復(fù)讀取一個(gè)塊數(shù)據(jù)會(huì)導(dǎo)致該塊的N個(gè)副本全部被送入buffer緩存.使用集中化緩存管理,用戶就能明確地只鎖定這N個(gè)副本中的M個(gè)了,從而節(jié)省了N-M的內(nèi)存量.
如圖6緩存結(jié)構(gòu)中[6],集群中所有DataNode的off-heap緩存通過NameNode負(fù)責(zé)協(xié)調(diào).每個(gè)DataNode的緩存報(bào)告都會(huì)相隔固定時(shí)間發(fā)送至NameNode(包含描述緩存在給定DN中的所有塊).NameNode通過借助DataNode心跳上的緩存和非緩存命令來管理DataNode緩存.
圖6 緩存結(jié)構(gòu)圖
NameNode查詢自身的緩存指令集來確定應(yīng)該緩存那個(gè)路徑.緩存指令永遠(yuǎn)存儲(chǔ)在fsimage和edit日志中,而且可以通過Java和命令行API被添加、移除或修改.NameNode還存儲(chǔ)了一組緩存池,它們是用于把資源管理類和強(qiáng)制權(quán)限類的緩存指令進(jìn)行分組的管理實(shí)體.
NameNode周期性地重復(fù)掃描命名空間和活躍的緩存指定以確定需要緩存或不緩存哪個(gè)塊,并向DataNode分配緩存任務(wù).重復(fù)掃描也可以由用戶動(dòng)作來觸發(fā),比如,添加或刪除一條緩存指令,或者刪除一個(gè)緩存池.
當(dāng)用戶緩存construction、corrupt下的塊數(shù)據(jù),或者別的不完整的塊,比如一條緩存指令包含一個(gè)符號(hào)鏈接時(shí),那么該符號(hào)鏈接目標(biāo)不會(huì)被緩存.
目前,文件或目錄級(jí)的緩存已經(jīng)實(shí)現(xiàn),塊和子塊緩存是未來的目標(biāo).
目前基于 HDFS對(duì)小文件存儲(chǔ)進(jìn)行優(yōu)化所提出的一些方案,有各自的優(yōu)點(diǎn)和不足,通過分析比較發(fā)現(xiàn),幾種文件系統(tǒng)的應(yīng)用方法雖然有所區(qū)別,可是都可以從增大cache命中率、降低元數(shù)據(jù)的磁盤訪問量、縮減隨機(jī)讀寫次數(shù)等方面來提高海量小文件的優(yōu)化效果.
現(xiàn)實(shí)中的不同應(yīng)用場(chǎng)景對(duì)海量數(shù)據(jù)存儲(chǔ)有不同側(cè)重點(diǎn)的需求,對(duì)于智慧博物館海量數(shù)據(jù)的多維化特點(diǎn),可通過多維索引進(jìn)行進(jìn)一步優(yōu)化.
[1] 劉高軍,王帝澳.基于Redis的海量小文件分布式存儲(chǔ)方法研究[J].計(jì)算機(jī)工程與科學(xué),2013,35(10):58-64.
[2] MACKEY G, SEHRISH S, WANG J. Improving metadata management for small files in HDFS [C]//Cluster Computing and Workshops, 2009. CLUSTER 09. IEEE International Conference on. New Orleans: IEEE, 2009:1-4.
[3] 洪旭升,林世平.基于MapFile的HDFS小文件存儲(chǔ)效率問題[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2012,21(11):179-182.
[4] 趙曉永,楊揚(yáng),孫莉莉,等.基于Hadoop的海量MP3文件存儲(chǔ)架構(gòu)研究[J].計(jì)算機(jī)應(yīng)用,2012,32(6):1724-1726.
[5] 余思,桂小林,黃汝維,等.一種提高云存儲(chǔ)中小文件存儲(chǔ)效率的方案[J].西安交通大學(xué)學(xué)報(bào),2011,45(6):59-63.
[6] 江柳.HDFS下小文件存儲(chǔ)優(yōu)化相關(guān)技術(shù)研究[D].北京:北京郵電大學(xué),2011:51-60.
Application of HDFS in the Construction of File Storage System of Smart Museum
ZHAO Xina, SHI Longb, ZHANG Jianguangb, LIU Xiab, SONG Zhenyuana
(a.Scientific Research Office, b. College of Mathematics and Computer Science, Hengshui University, Hengshui, Hebei 053000, China)
With the construction of the smart museum, various heritage collection information is increasing constantly, and more and more multimedia data information is formed. That demands a better system of heritage data storage and management. In view of the characteristics of small file resource in the massive multimedia data in the digital museum, based on the Hadoop File System ( HDFS ) distributed file system, a large number of small files are merged into big files, and the metadata reading and writing process are optimized. According to the strategy of storing mass different small files, the storage results should be optimized from the aspects of packing small files, reducing the number of files and centralizing cache management.
smart museum; mass storage; HDFS distributed system; small file storage
(責(zé)任編校:李建明 英文校對(duì):李玉玲)
10.3969/j.issn.1673-2065.2017.04.002
TP333
A
1673-2065(2017)04-0006-05
2017-05-23
衡水市科技計(jì)劃項(xiàng)目(2016011010Z);河北省高等學(xué)??茖W(xué)技術(shù)研究青年基金項(xiàng)目(QN2017513)
趙 鑫(1984-),女,河北饒陽人,衡水學(xué)院科研處講師,工程碩士; 石 龍(1988-),男,河北衡水人,衡水學(xué)院數(shù)學(xué)與計(jì)算機(jī)科學(xué)學(xué)院助教.