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