江建舉,仵 博,孟憲軍,馮延蓬,何國坤
(深圳職業(yè)技術(shù)學(xué)院 教育技術(shù)與信息中心,廣東 深圳518055)
基于信息化爆炸產(chǎn)生的海量數(shù)據(jù)非常復(fù)雜,既包含了結(jié)構(gòu)化的數(shù)據(jù)和半結(jié)構(gòu)化的數(shù)據(jù)、也包含了非結(jié)構(gòu)化的文本、視頻、圖像等信息[1].針對大數(shù)據(jù)的研究也逐漸成為業(yè)界研究的焦點(diǎn),大數(shù)據(jù)的采集、處理、存儲、集成、分析和安全等問題成為主要的研究目標(biāo)[2].其中基于分布式并行文件系統(tǒng)的分布式存儲技術(shù)是大數(shù)據(jù)存儲研究的首要選擇,當(dāng)前業(yè)界分別提出了GFS、PPFS、GPFS、PVFS、PFS和 HDFS等分布式文件系統(tǒng).Hadoop是一套用于海量數(shù)據(jù)處理的系統(tǒng)基礎(chǔ)平臺,能夠?qū)Υ罅繑?shù)據(jù)進(jìn)行以一種可靠、高效、可伸縮的方式進(jìn)行分布式處理.Hadoop平臺的基本組件HDFS是當(dāng)前應(yīng)用和研究最廣泛的一種大數(shù)據(jù)存儲分布式文件系統(tǒng),其本質(zhì)上是一種流式分塊文件系統(tǒng),基本的設(shè)計是處理大文件(文件大小通常大于64MB),在處理海量小文件時,在擴(kuò)展性和性能方面將產(chǎn)生嚴(yán)重問題[3].本文研究一種改進(jìn)的 Hadoop文件存儲優(yōu)化策略,通過文件大小的預(yù)處理,進(jìn)行小文件的歸并,提出一種新的元數(shù)據(jù)管理策略和通用文件存儲模式,從而解決HDFS處理海量小文件導(dǎo)致的性能問題,可以為各種應(yīng)用場景提供服務(wù).
Hadoop平臺核心為分布式文件系統(tǒng) HDFS和分布式編程模型MapReduce.HDFS是Hadoop平臺的底層文件存儲系統(tǒng),它是一種運(yùn)行在大量廉價硬件上的分布式文件系統(tǒng),主要負(fù)責(zé)分布式數(shù)據(jù)存儲及管理,具有高容錯性,雖然部署在低成本的硬件上,但是能提供高吞吐量的數(shù)據(jù)存取服務(wù),其核心是以數(shù)據(jù)流的方式來訪問存儲文件,這極大的提高了系統(tǒng)存取文件的速度和效率.HDFS采用Master/Slaver體系架構(gòu),其中Master為一個作為名稱節(jié)點(diǎn)的 NameNode,Slaver為多個數(shù)據(jù)存儲節(jié)點(diǎn)的DataNode.名稱節(jié)點(diǎn)負(fù)責(zé)目錄、文件及數(shù)據(jù)存取等元數(shù)據(jù)信息管理和維護(hù),主要完成管理元數(shù)據(jù)和文件塊、簡化元數(shù)據(jù)更新操作、監(jiān)聽和處理客戶端及數(shù)據(jù)節(jié)點(diǎn)的請求、心跳檢測等功能.?dāng)?shù)據(jù)節(jié)點(diǎn)負(fù)責(zé)基本的數(shù)據(jù)存儲和對自己存儲資源進(jìn)行管理和計算,主要完成數(shù)據(jù)塊的讀寫、定期向名稱節(jié)點(diǎn)報告狀態(tài)、執(zhí)行數(shù)據(jù)塊的流水線復(fù)制等功能.
在HDFS中,一個文件被劃分為多個數(shù)據(jù)塊(默認(rèn)數(shù)據(jù)塊大小為 64MB)并被分散存儲在不同的數(shù)據(jù)節(jié)點(diǎn)上,每個數(shù)據(jù)塊都能通過數(shù)據(jù)節(jié)點(diǎn)之間的相互復(fù)制而具有多個備份.當(dāng)用戶訪問文件時,首先是把包含了文件名稱的操作申請發(fā)送給名稱節(jié)點(diǎn),名稱節(jié)點(diǎn)會將相關(guān)的元數(shù)據(jù)信息包括該文件對應(yīng)的Block和Block在數(shù)據(jù)節(jié)點(diǎn)的位置信息等反饋給用戶.用戶端根據(jù)獲得的元數(shù)據(jù)信息直接和相應(yīng)的數(shù)據(jù)節(jié)點(diǎn)建立連接,進(jìn)行具體的文件讀、寫、刪除等操作.HDFS文件系統(tǒng)的文件操作結(jié)構(gòu)圖如圖1所示.
圖1 HDFS系統(tǒng)文件操作示意圖
當(dāng)前的信息技術(shù)大發(fā)展背景下,多種信息渠道獲取大量的數(shù)據(jù),這些海量數(shù)據(jù)尺寸大小各異,訪問頻繁.HDFS的初始設(shè)計是流式存取大文件,當(dāng)處理大量小文件時,會產(chǎn)生如下明顯的性能瓶頸問題:大量文件將占用大量的內(nèi)存空間,因為名稱節(jié)點(diǎn)將文件系統(tǒng)的命名空間存儲于系統(tǒng)內(nèi)存,每個小文件的元數(shù)據(jù)信息大約占用150bit內(nèi)存空間,3個Block副本大約占用368bit內(nèi)存空間,這樣數(shù)量龐大的小文件將極大消耗名稱節(jié)點(diǎn)的內(nèi)存空間;HDFS主要設(shè)計用于提供流式數(shù)據(jù)訪問模式,這種方式適用于大文件,當(dāng)訪問大量小文件時,會出現(xiàn)比較高的訪問成本.對于小文件的檢索,通常會導(dǎo)致從一個數(shù)據(jù)節(jié)點(diǎn)到另外一個數(shù)據(jù)節(jié)點(diǎn)的大量搜索和跳躍;HDFS中元數(shù)據(jù)頻繁交互,元數(shù)據(jù)的處理是非常耗時的操作.對于海量小文件的操作,元數(shù)據(jù)操作消耗了大部分時間,小文件的I/O只占用少部分時間.小文件的操作,需要多次和名稱節(jié)點(diǎn)進(jìn)行交互,極大的增加了名稱節(jié)點(diǎn)的負(fù)擔(dān),同時因為需要多次seek,也會在數(shù)據(jù)節(jié)點(diǎn)上產(chǎn)生跳躍,這一切都將增加HDFS的負(fù)載,從而導(dǎo)致大量小文件I/O性能的極大下滑.
針對HDFS處理海量小文件進(jìn)行性能優(yōu)化,是目前學(xué)術(shù)界和工業(yè)界研究的熱門方向.MACKEY等[4]人提出利用Hadoop Archive技術(shù)進(jìn)行小文件的歸并,提高了 HDFS的元數(shù)據(jù)的存取效率;Liu XuHui等[5]提出一種新的方法優(yōu)化大量WebGIS小文件的HDFS存儲策略;Dong Bo等[6]提出了一種優(yōu)化大量PPT文件的HDFS存儲新策略;趙曉勇等[7]提出了一種新的基于Hadoop的海量MP3文件存儲架構(gòu),優(yōu)化MP3文件的存儲訪問.以上的研究基本都是基于某些特定應(yīng)用,并不能適應(yīng)優(yōu)化 HDFS存取一般的大小文件混合的海量數(shù)據(jù).張波[8]通過增加同一機(jī)架內(nèi)增加名稱節(jié)點(diǎn)和增加相應(yīng)元數(shù)據(jù)的方式對HDFS存取小文件進(jìn)行優(yōu)化操作,有效的提高了小文件I/O的性能.本文將從文件預(yù)處理、增加操作元數(shù)據(jù)和元數(shù)據(jù)批處理操作等幾個方面進(jìn)行HDFS存取小文件的優(yōu)化研究.
針對增加的元數(shù)據(jù)信息,名稱節(jié)點(diǎn)需要維護(hù)所有的元數(shù)據(jù)信息,因為小文件的海量數(shù)量需要消耗大量的內(nèi)存,所以名稱節(jié)點(diǎn)需要采用元數(shù)據(jù)緩存技術(shù),通過LRU(近期最少使用算法)的替換策略進(jìn)行名稱節(jié)點(diǎn)的內(nèi)存元數(shù)據(jù)管理.針對小文件頻繁的讀寫操作,為了優(yōu)化名稱節(jié)點(diǎn)更新元數(shù)據(jù)的效率,采用負(fù)載小文件的整體Block作為向名稱節(jié)點(diǎn)請求和更新元數(shù)據(jù)的策略,主要策略是當(dāng)單個小文件寫操作結(jié)束后暫時不進(jìn)行名稱節(jié)點(diǎn)中元數(shù)據(jù)的更新修改操作,從而減少名稱節(jié)點(diǎn)的頻繁訪問.只有滿足以下幾個條件如Block空間寫滿、新用戶對該Block產(chǎn)生了讀請求、一定時間段內(nèi)該Block沒有新的讀寫請求時,才通知名稱節(jié)點(diǎn)進(jìn)行元數(shù)據(jù)的批處理更新操作.這種元數(shù)據(jù)的批處理更新策略可以加快系統(tǒng)小文件的I/O速度,并明顯減輕名稱節(jié)點(diǎn)的元數(shù)據(jù)更新負(fù)擔(dān).本文對HDFS進(jìn)行優(yōu)化擴(kuò)展的存取架構(gòu)如圖2所示.
圖2 優(yōu)化的HDFS小文件存取架構(gòu)圖
本次測試的實(shí)驗環(huán)境是六臺曙光A840r-H思路四核服務(wù)器,其中一臺作為名稱節(jié)點(diǎn),其他五臺作為數(shù)據(jù)節(jié)點(diǎn),操作系統(tǒng)均為 64位 Red Hat linux 5,Hadoop版本是1.2.1 stable,JDK版本為1.6.0.24.實(shí)驗中用10萬個小文件進(jìn)行測試,文件的大小從1k-1M大小不等的小文件.本次測試主要通過寫 10萬個文件的完成時間和期間名稱節(jié)點(diǎn)的內(nèi)存占用率兩個方面進(jìn)行傳統(tǒng)HDFS系統(tǒng)和優(yōu)化的HDFS系統(tǒng)的小文件I/O效率比較測試.
根據(jù)測試結(jié)果分析,在傳統(tǒng)HDFS架構(gòu)下,隨著小文件數(shù)量的增加,寫文件的時間明顯呈現(xiàn)明顯增長,而且增長時間越來越大,說明傳統(tǒng)HDFS在處理大量小文件寫操作時I/O性能下降明顯,必須進(jìn)行相應(yīng)的優(yōu)化操作.在優(yōu)化的HDFS系統(tǒng)下,相同數(shù)量的小文件寫文件的時間相對降低,而且隨著小文件數(shù)量的倍增寫文件時間呈線性增長,表明優(yōu)化后的HDFS處理小文件時性能穩(wěn)定提升.寫文件時間示意圖如圖3所示.
根據(jù)測試結(jié)果分析,在傳統(tǒng)HDFS架構(gòu)下,名稱節(jié)點(diǎn)在處理大量小文件寫操作時內(nèi)存使用率一直維持在一個相對比較高的狀態(tài),如果小文件數(shù)量過于龐大,將會導(dǎo)致名稱節(jié)點(diǎn)內(nèi)存占滿而使系統(tǒng)吞吐率急速下滑.而在優(yōu)化的HDFS系統(tǒng)下,名稱節(jié)點(diǎn)寫文件時的內(nèi)存使用率一直保持在一個較低的狀態(tài),說明小文件寫操作的批處理有效提高了小文件的I/O性能.寫文件時內(nèi)存使用率示意圖如圖4所示.
圖3 寫文件時間圖
圖4 寫文件時名稱節(jié)點(diǎn)內(nèi)存利用率(%)
實(shí)驗結(jié)果可見,在HDFS系統(tǒng)傳統(tǒng)架構(gòu)下,增加相應(yīng)的元數(shù)據(jù),進(jìn)行文件的預(yù)處理,提高了HDFS系統(tǒng)寫小文件的性能,并較好地降低了名稱節(jié)點(diǎn)的內(nèi)存瓶頸問題,能夠適應(yīng)不同場合提高HDFS存取海量文件的性能.
[1] 佘叢國,朱志軍.大數(shù)據(jù)與云計算的關(guān)系及其對通訊行業(yè)的影響[C]//寬帶中國戰(zhàn)略與創(chuàng)新學(xué)術(shù)研討會論文集,2012.
[2] 王珊,王會舉,覃雄派,等.架構(gòu)大數(shù)據(jù):挑戰(zhàn)、現(xiàn)狀與展望[J].計算機(jī)學(xué)報,2011,34(10):1741-1752.
[3] Small files problem[EB/OL].http://www.cloudera.com/blog/2009/02/the-small-files-problem/.
[4] MACKEY G, SEHRISH S, WANG JUN. Improving metadata management for small files in HDFS[C]//Proceedings of 2009 IEEE International Conference on Cluster Computing and Workshops. Piscataway:IEEE Press, 2009:1-4.
[5] LIU XUHUI, HAN JIZHONG, ZHONG YUNQIN, et al.Implementing WebGIS on Hadoop: A case study of improving small file I/O performance on HDFS[C]//2009 IEEE International Conference on Cluster Computing and Workshops. Piscataway: IEEE press,2009:1-8.
[6] DONG BO, QIU JIE, ZHENG QINGHUA, et al. A novel approach to improving the efficiency of storing and accessing small files on Hadoop: a case study by PowerPoint files[C]//Proceedings of the 2010 IEEE International Conference on Services Computing. Washington, DC: IEEE Computer Society, 2010:65-72.
[7] 趙曉永,楊揚(yáng),孫莉莉,等.基于Hadoop 的海量MP3文件存儲架構(gòu)[J].計算機(jī)應(yīng)用,2012,32(6):1724-1726.
[8] 張波.HDFS下文件存儲研究與優(yōu)化[D].廣東工業(yè)大學(xué),2013.