陳曉波
摘要:谷歌公司在2006年推出“Google101計劃”,這才真正的有具體化的“云”的概念和相關(guān)理論,不少公司都相繼推出了自己的云平臺。面臨未來素材庫可能會到來的海量數(shù)據(jù),利用云存儲可以線性地擴(kuò)展海量的非活動數(shù)據(jù)。該文首簡述了云平臺的基本架構(gòu),并對Hadoop分布式存儲技術(shù)進(jìn)行了介紹,然后設(shè)計了云存儲針對小型文件的存儲方案,最后進(jìn)行總結(jié),并對未來的改進(jìn)提出了建議。
關(guān)鍵詞:云存儲;Hadoop;分布式存儲
中圖分類號:TP393 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(20015)02-0003-03
Abstract:Google launched "Google101 program" in 2006. This is when truly specific concept of the "cloud" and related theories appear.Many companies have launched their own cloud platform. Facing the possibility of upcoming massive data of the library,cloud storage can linearly extend inactive data mass. This paper firstly outlines the basic architecture of the cloud platform, and introduces Hadoop distributed storage technology , then a program for the cloud storage in small files is designed.Finally a summary and recommendations for future improvements are put forward.
Key words: cloud storage; Hadoop;distributed storage
目前隨著移動設(shè)備和無線網(wǎng)絡(luò)的迅速普及,在移動互聯(lián)網(wǎng)上創(chuàng)建虛擬3D世界變得非常流行,已成為一個新興數(shù)字媒體產(chǎn)業(yè),并顯現(xiàn)出巨大的市場潛力和光明的產(chǎn)業(yè)化前景。同樣,為了推動這一產(chǎn)業(yè)的發(fā)展,那么集合大量的Web3D素材是極其有必要的。但是,由于Web3D素材的特性,不可避免的包含大量貼圖,從而其數(shù)據(jù)大小不同于文字和普通的圖片,級別普遍在十幾兆到數(shù)十兆之間。隨之而來的就是數(shù)據(jù)的存儲和管理問題,存儲方面,目前行業(yè)中的素材數(shù)量沒有具體統(tǒng)計,但粗略估算在千萬量級甚至以上。數(shù)據(jù)量龐大,以及數(shù)據(jù)傳輸效率的要求,云存儲系統(tǒng)是最合適的解決方案。
1 云平臺的基礎(chǔ)架構(gòu)
云計算涉及在現(xiàn)有網(wǎng)絡(luò)上進(jìn)行分布式計算,借此用戶的程序或應(yīng)用可以同時在一臺或多臺連接到這個網(wǎng)絡(luò)的計算機(jī)上運(yùn)行。一個或一組物理存在的計算機(jī)通過互聯(lián)網(wǎng)(Internet)、內(nèi)網(wǎng)(Intranet)、局域網(wǎng)(local area network)或者廣域網(wǎng)(wide area network)連接到一起,作為一個整體以服務(wù)器的形式呈現(xiàn)給外界,這樣的形式就是云計算的具體表現(xiàn)。任何有權(quán)限訪問這個服務(wù)器的用戶可以使用它的計算能力來運(yùn)行應(yīng)用、存儲數(shù)據(jù)或者執(zhí)行其他任務(wù)。
云計算服務(wù)的模式主要有三種:基礎(chǔ)設(shè)施即服務(wù)(Infrastructure-as-a-Service, IaaS),平臺即服務(wù)(Platform-as-a-Service,PaaS)和軟件即服務(wù)(Software-as-a-Service,SaaS)。其邏輯上的關(guān)系見圖1。
IaaS,基礎(chǔ)設(shè)施即服務(wù)是最基本的云服務(wù)模型,主要功能是將計算機(jī)偏底層的資源作為服務(wù)提供給用戶,其中主要是提供計算機(jī)服務(wù),可以根據(jù)用戶的性能需求進(jìn)行相應(yīng)的配置調(diào)整,如CPU核數(shù),內(nèi)存大小,硬盤容量等等。用戶通過互聯(lián)網(wǎng)從這些集群設(shè)備中去申請服務(wù)。
PaaS是把計算平臺(Computing Platform)作為一種服務(wù)提供的商業(yè)模式。其中,計算平臺主要包括操作系統(tǒng),程序語言執(zhí)行環(huán)境,數(shù)據(jù)庫,Web服務(wù)器等平臺級產(chǎn)品。
SaaS模型的服務(wù)是將應(yīng)用軟件作為服務(wù)提供給用戶。在這個模型中,運(yùn)行應(yīng)用軟件所需要的軟硬件資源皆由SaaS的提供商管理、維護(hù)。
云平臺是用來提供各種云計算服務(wù)的平臺。用戶可以在云平臺上購買、使用云計算服務(wù),方便用戶組合使用云計算服務(wù)以達(dá)成用戶的目標(biāo)。國外較為知名并具有代表性的有谷歌的云計算平臺(Google Cloud Platform),IBM的“智慧云”計算平臺(SmartCloud)和Amazon的彈性計算云(Elastic Compute Cloud)。國內(nèi)也開始推出自己的云平臺,比較大的有百度云平臺和阿里云平臺,為客戶提供各類云服務(wù)。
2 分布式存儲系統(tǒng)Hadoop介紹
Hadoop作為分布式存儲系統(tǒng)的典范,是一個能夠?qū)Υ罅繑?shù)據(jù)進(jìn)行分布式處理的軟件框架,具有高容錯性和高擴(kuò)展性等優(yōu)點(diǎn),允許用戶將Hadoop部署到價格低廉的服務(wù)器上,實(shí)現(xiàn)了將一項任務(wù)分發(fā)到由多臺機(jī)器組成的集群上,并有一系列的高容錯機(jī)制支撐。在具體實(shí)現(xiàn)時,開發(fā)人員直接搭建,實(shí)現(xiàn)整個云平臺的管理,而又不需要知道內(nèi)部機(jī)制,這種智能化便捷化的分布式集群對開發(fā)人員技術(shù)的要求門檻較低。
Hadoop與GoogleGFS幾乎一致,因?yàn)镠adoop就是根據(jù)GFS創(chuàng)造的,包含HDFS、MapReduce、HBase。
2.1 HDFS
HDFS最上層是一個NameNode,下面有許多DataNode,關(guān)系像Master和slave一樣,所以有時候也稱NameNode為Master,DataNode為slave。NameNode對管理文件系統(tǒng)的元數(shù)據(jù)進(jìn)行管理。DataNode中存儲實(shí)際的文件數(shù)據(jù)??蛻舳撕蚇ameNode進(jìn)行通信,獲取到文件的元數(shù)據(jù)后,然后直接和DataNode進(jìn)行文件的I/O操作。
HDFS最常見的部署方法就是將NameNode部署在一臺專門的服務(wù)器上,在集群中的其他機(jī)器上運(yùn)行一個或多個DataNode;同時也可以在NameNode所在的服務(wù)器上運(yùn)行一個或多個DataNode。采用一個NameNode使整個系統(tǒng)的架構(gòu)非常簡單。
NameNode中會記錄HDFS中元數(shù)據(jù)的變化,采用的是EditLog形式記錄。NameNode中使用FsImage來存儲文件系統(tǒng)的命名空間,命名空間包括文件與塊之間的映射,文件本身的屬性等。EditLog和FsImage都存儲在Namenode上。
HDFS中為了維持系統(tǒng)的穩(wěn)定性,還設(shè)立了第二個NameNode節(jié)點(diǎn),稱作Secondary NameNode節(jié)點(diǎn),它會輔助NameNode處理FsImage和EditLog。NameNode啟動時會將EditLog和FsImge合并,而Secondary NameNode會周期性地從NameNode上去復(fù)制這些FsImage和EditLog到臨時目錄中,合并生成新的FsImage后再重新上傳到 NameNode,這樣當(dāng)NameNode宕機(jī)后,Secondary NameNode還可以繼續(xù)工作,所保存的FsImage信息還存在。
2.2 HBase
HBase系統(tǒng)在架構(gòu)層面由一個Master和多個RegionServer組成。如圖2所示。
其中,每個RegionServer對應(yīng)集群中的一個節(jié)點(diǎn),一個RegionServer負(fù)責(zé)管理多個Region。一張表上有很多數(shù)據(jù),每個Region只是一張表上的部分?jǐn)?shù)據(jù),所以在HBase中的一張表可能會需要很多個Region來存儲其數(shù)據(jù)。HBase在對Region進(jìn)行管理的過程中,會給針對每一個Region劃定一個范圍,也就是Row Key的一個區(qū)間,在這個特定的區(qū)間內(nèi)的數(shù)據(jù)就交給特定的Region,這樣能夠保證負(fù)載相對均衡,能夠分?jǐn)偟礁鱾€節(jié)點(diǎn)之上,這也是分布式的特點(diǎn)。此外,HBase也會自動地調(diào)節(jié)Region所在的位置。如果一個RegionServer變得比較活躍,使用的比較頻繁,HBase會把 Region轉(zhuǎn)移到不是很忙的節(jié)點(diǎn),如此集群環(huán)境可以被合理使用。
Table在行的方向上劃分成多個Region,Region是按照空間來劃分的,最初建立Table時,Table內(nèi)的Region數(shù)量只有一個,隨著系統(tǒng)的投入使用,Table內(nèi)開始被不斷的插入數(shù)據(jù),Region內(nèi)會不斷的存入數(shù)據(jù),當(dāng)數(shù)據(jù)量達(dá)到某個特定的閥值,Region就會等分,變成兩個Region。Table是面向列的數(shù)據(jù)庫,行數(shù)會不斷的增加,HRegion數(shù)量也會不斷增多。在HBase中,分布式存儲的最小單元是HRegion,但是一個HRegion內(nèi)又有一個或多個store構(gòu)成。如圖3所示:
3 基于HBase的Web3D素材存儲設(shè)計
3.1 存儲系統(tǒng)的整體設(shè)計
由于素材本身數(shù)據(jù)的屬性,比如名稱、別名、文件類型等,這些信息存儲在MySQL中,同時為素材分配一個ID,在HBase存儲這個ID信息和一些簡單的關(guān)系稀疏的文件屬性。如圖4所示:
3.2 小型素材文件在HDFS上的存儲
系統(tǒng)素材文件[19]本身存儲在由HBase管理的HDFS中,而HDFS是專門為了大數(shù)據(jù)存儲而設(shè)計的,針對Web3D素材普遍是小文件的情況,就采用將素材文件進(jìn)行合并,形成一個個大文件,然后將這些大文件存儲到HDFS中的做法實(shí)現(xiàn)小文件的存儲。
將素材文件合并后,我們不僅僅是存儲進(jìn)系統(tǒng),平臺本身還需要隨時查詢這些小文件,所以我們必須建立素材小文件與合并后的塊的對應(yīng)關(guān)系。我們在文件名中標(biāo)注合并后的大塊的ID以及塊內(nèi)的偏移量加上文件塊內(nèi)的長度來標(biāo)記這個文件。
假設(shè)素材文件大小為2M,默認(rèn)的一個塊的大小為64M。首先Master會在集群內(nèi)找到一個空余剩余超過2M的塊。假設(shè)塊的ID為1234,且已經(jīng)存儲了32M的數(shù)據(jù),塊內(nèi)的偏移量是通過頁來記錄的,一頁的大小為16k,那么目前32x1024/16=2048,那么素材存儲的位置就是從2049開始的,并且2M大小的數(shù)據(jù)占空間為128頁,那么該素材文件標(biāo)記為(1234,2049,128)。
但是HDFS中的Master部分并沒有關(guān)于文件和塊的映射關(guān)系,我們需要在Master中設(shè)計這樣的查詢功能,新系統(tǒng)的架構(gòu)圖如圖4所示:
當(dāng)客戶端想要讀取某個素材文件時,首先從NameNode中的查詢模塊,從而獲得素材文件與塊之間的映射信息。
4 結(jié)束語
本文部署了Hadoop集群作為系統(tǒng)的分布式云存儲平臺,將用戶的資料等結(jié)構(gòu)化數(shù)據(jù)存儲在MySQL中,并在MySQL中存儲部分關(guān)聯(lián)性強(qiáng)的素材元數(shù)據(jù),并且指定ID。將素材本身存入Hadoop集群中,通過小文件打包的形式,改善了Hadoop集群中不適合存儲小文件的情況。但是關(guān)于系統(tǒng)文件打包機(jī)制,存儲后的刪除問題,僅僅從MySQL中刪除了素材文件的源信息,實(shí)際的文件還部分殘留在系統(tǒng)中,這一點(diǎn)應(yīng)該對文件與塊的關(guān)系上繼續(xù)深化研究下去。
參考文獻(xiàn):
[1] Bhardwaj Sushil, Leena Jain, Sandeep Jain. Cloud computing: A study of infrastructure as a service (IAAS)[J]. International Journal of engineering and information Technology, 2010(2.1): 60-63.
[2] Vaquero, Luis M. A break in the clouds: towards a cloud definition[J]. ACM SIGCOMM Computer Communication Review, 2008,39(1): 50-55.
[3] Cloud, Amazon Elastic Compute. Amazon web services[J]. Retrieved November, 2011(9): 2011.
[4] 黃賢立. NoSQL非關(guān)系型數(shù)據(jù)庫的發(fā)展及應(yīng)用初探[J]. 福建電腦, 2010(7): 30.
[5] 黃曉云. 基于HDFS的云存儲服務(wù)系統(tǒng)研究[D]. 大連: 大連海事大學(xué). 2010.
[6] 余思, 桂小林, 黃汝維. 一種提高云存儲中小文件存儲效率的方法[J]. 西安交通大學(xué)學(xué)報:自然科學(xué)版, 2011(6): 59-63.
[7] MACKEY G, SEHRI S, WANG Jua. Improving metadata management for small files in HDFS[C]. 2010.
[8] 肖桐. 應(yīng)用于海量數(shù)據(jù)處理分析的云計算平臺搭建研究[D]. 天津: 天津科技大學(xué), 2013.
[9] Vora M N.Hadoop-HBase for large-scale data[J]. Computer Science and Network Technology(ICCSNT), 2011(1).
[10] Lars George. HBase: The Definitive Guide[M]. O'Reilly Media, 2011.