国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

HBase數(shù)據(jù)庫中大對(duì)象存儲(chǔ)方案的研究

2014-09-18 16:36:59王立峰
電腦知識(shí)與技術(shù) 2014年23期

王立峰

摘要:在云計(jì)算和大數(shù)據(jù)時(shí)代,電子商務(wù)、移動(dòng)互聯(lián)網(wǎng)以及各種智能終端的興起,產(chǎn)生了大量的數(shù)據(jù),其中圖片、視頻等在社交領(lǐng)域經(jīng)常使用的數(shù)據(jù)都是非結(jié)構(gòu)化的,所以無法用傳統(tǒng)的數(shù)據(jù)存儲(chǔ)技術(shù)進(jìn)行存儲(chǔ)。HBase是一種適合存儲(chǔ)大對(duì)象的非結(jié)構(gòu)化數(shù)據(jù)庫,該文對(duì)HBase數(shù)據(jù)庫存儲(chǔ)大對(duì)象的技術(shù)進(jìn)行分析,以為大對(duì)象存儲(chǔ)提供經(jīng)驗(yàn)。

關(guān)鍵詞:Hbase;大對(duì)象存儲(chǔ);nosql數(shù)據(jù)庫

中圖分類號(hào):TP392 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2014)23-5401-02

1 緒論

云計(jì)算技術(shù)的發(fā)展使計(jì)算模型由傳統(tǒng)的客戶機(jī)/服務(wù)器(client/server)模式發(fā)展到web計(jì)算模式,進(jìn)而發(fā)展為如今的云計(jì)算架構(gòu);電子商務(wù)的興起、智能終端的廣泛應(yīng)用以及社交網(wǎng)絡(luò)的普及無不昭示著海量數(shù)據(jù)時(shí)代已經(jīng)到來。

海量數(shù)據(jù)的首要特征就是其非結(jié)構(gòu)化,這些數(shù)據(jù)不僅需要長(zhǎng)期的存儲(chǔ),而且還可能會(huì)被隨機(jī)訪問,傳統(tǒng)的數(shù)據(jù)存儲(chǔ)技術(shù)已經(jīng)無法滿足海量數(shù)據(jù)的這些需求;另外,對(duì)大量數(shù)據(jù)的管理、挖掘和分析也難以使用傳統(tǒng)的關(guān)系型數(shù)據(jù)庫技術(shù)實(shí)現(xiàn)。

當(dāng)存在一個(gè)包含大量業(yè)務(wù)數(shù)據(jù)的數(shù)據(jù)庫時(shí),如何對(duì)其進(jìn)行存儲(chǔ),提高存儲(chǔ)和查詢的效率是當(dāng)前的一個(gè)迫切需求。目前已有的技術(shù)中,基于Hadoop開源框架的HBase數(shù)據(jù)庫是一種比較成熟的解決方案。HBase數(shù)據(jù)庫在存儲(chǔ)數(shù)據(jù)時(shí)和傳統(tǒng)的關(guān)系型數(shù)據(jù)庫不同,是采取列式存儲(chǔ)的;這種存儲(chǔ)方式對(duì)于處理非結(jié)構(gòu)化的數(shù)據(jù)有較大的優(yōu)勢(shì),如何發(fā)揮HBase存儲(chǔ)大對(duì)象的優(yōu)勢(shì),是本文重點(diǎn)研究的內(nèi)容。

2 HBase數(shù)據(jù)庫及其存儲(chǔ)方式

HBase數(shù)據(jù)庫是建立在Hadoop分布式開源框架上的,其數(shù)據(jù)存儲(chǔ)在Hadoop的核心組件HDFS文件系統(tǒng)上,能夠提供列式存儲(chǔ)的、高性能并且實(shí)時(shí)讀寫的分布式數(shù)據(jù)存儲(chǔ)功能。HBase數(shù)據(jù)庫是一種介于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫中間的一種數(shù)據(jù)庫,檢索數(shù)據(jù)的方式是其主鍵,一般用于存儲(chǔ)非結(jié)構(gòu)化數(shù)據(jù)。不論是時(shí)間開銷,還是存儲(chǔ)方式,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫在處理大對(duì)象時(shí)都有一定的局限性;而HBase數(shù)據(jù)庫誕生之初就是為海量數(shù)據(jù)準(zhǔn)備的,可以處理高達(dá)PB級(jí)別的數(shù)據(jù)存儲(chǔ)。

HBase數(shù)據(jù)庫分為HMaster、Region server以及Client三種角色[1],相對(duì)于HMaster而言,所有的數(shù)據(jù)節(jié)點(diǎn)又可以稱為Region server,因?yàn)樗鼈兇鎯?chǔ)了相關(guān)表的region。region是按大小分隔的數(shù)據(jù)表的內(nèi)容。HMaster會(huì)為Region server分配region,并在不同的region間進(jìn)行region server的負(fù)載均衡。當(dāng)HMaster發(fā)現(xiàn)有region server失效時(shí),會(huì)重新分配在此服務(wù)器上的所有region。

圖1表示了HBase的存儲(chǔ)架構(gòu),其中HBase Client包含訪問Hbase的API接口,它通過此接口和HBase進(jìn)行交互:當(dāng)HBase Client要進(jìn)行管理類操作時(shí),它和HMaster節(jié)點(diǎn)進(jìn)行交互;當(dāng)要進(jìn)行數(shù)據(jù)類操作時(shí),和Region server進(jìn)行交互。Zookeeper是整個(gè)HBase數(shù)據(jù)庫集群的狀態(tài)協(xié)調(diào)程序,在zookeeper中存儲(chǔ)了HMaster和所有Region server的地址,這樣HMaster就可以感知所有Region server的狀態(tài),一旦有region server失效,HMaster就重新分配存儲(chǔ)在此服務(wù)器上的所有region到其他可用Region server。

Zookeeper能夠有效避免HBase數(shù)據(jù)庫的單點(diǎn)故障問題:HBase數(shù)據(jù)庫集群中可以啟動(dòng)多個(gè)master進(jìn)程,zookeeper通過一定的選舉機(jī)制選擇哪個(gè)服務(wù)器的master進(jìn)程充當(dāng)HMaster,所以只要啟動(dòng)了多個(gè)master,zookeeper就可以有效防止HBase集群出現(xiàn)單點(diǎn)故障,以保證HBase數(shù)據(jù)庫一直處于可用狀態(tài)。

HBase數(shù)據(jù)庫中的表如果比較大,會(huì)在行的方向上拆分為多個(gè)region,每個(gè)表開始時(shí)僅僅存在一個(gè)region,表的數(shù)據(jù)不斷增大使region也不斷增大,當(dāng)增大到一個(gè)閥值的時(shí)候,一個(gè)region就會(huì)等分為兩個(gè)新的region。Region server中存儲(chǔ)了若干HRegion,對(duì)應(yīng)表的region,每個(gè)HRegion由多個(gè)HStore文件組成,HStore文件是真正實(shí)現(xiàn)存儲(chǔ)大對(duì)象數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),它又可以分為內(nèi)存存儲(chǔ)(MemStore)和文件系統(tǒng)文件(HFile)兩部分。Client端寫入到HBase數(shù)據(jù)庫中的數(shù)據(jù)首先 會(huì)被存儲(chǔ)在內(nèi)存區(qū)域MemStore中,當(dāng)整個(gè)MemStore存儲(chǔ)滿之后,這些內(nèi)存中的數(shù)據(jù)才會(huì)被寫入到HFile中。HBase數(shù)據(jù)庫中可以存儲(chǔ)的HFile個(gè)數(shù)是有限的,但數(shù)量達(dá)到一定的限值后,HBase數(shù)據(jù)庫會(huì)執(zhí)行合并(compact)操作,將多個(gè)HFile文件合并為一個(gè)。由HBase的這種存儲(chǔ)機(jī)制可以看出,對(duì)HBase數(shù)據(jù)庫的操作其實(shí)只有增加數(shù)據(jù)的操作,所有的更新和刪除操作都在合并過程中完成,因此client端的寫操作可以立即返回,無疑從存儲(chǔ)層次提高了HBase數(shù)據(jù)庫的I/O讀寫性能。

總而言之,分布式數(shù)據(jù)庫HBase的性能主要如下[2]:(1) 高擴(kuò)展性。除了和HDFS集成的擴(kuò)展性外,HBase數(shù)據(jù)庫自身就支持可擴(kuò)展性:當(dāng)region server中的HFile文件達(dá)到一定大小時(shí),HBase會(huì)自動(dòng)進(jìn)行分裂(split)操作,分裂得到的兩個(gè)region會(huì)被分發(fā)到不同的region server上。通過這樣的方式,可以將海量數(shù)據(jù)分發(fā)到大量服務(wù)器上。(2) 高性能優(yōu)勢(shì)。HBase在設(shè)計(jì)之初就支持高并發(fā)的讀寫,數(shù)據(jù)表被按行分為多個(gè)region,每個(gè)region被部署到多個(gè)region server上,從而支持對(duì)數(shù)據(jù)的并行訪問。

3 大對(duì)象在HBase數(shù)據(jù)庫中的存儲(chǔ)

大對(duì)象(Large Object)主要有兩種:字符大對(duì)象和二進(jìn)制大對(duì)象,日常生活中常見的圖片、視頻、音頻以及各種文檔等都可以看作是大對(duì)象。對(duì)大對(duì)象的存儲(chǔ)需要重點(diǎn)關(guān)注其插入、讀取和管理三部分。

目前HBase在存儲(chǔ)大對(duì)象數(shù)據(jù)時(shí),主要有三種解決方案[3]:

1) 大對(duì)象數(shù)據(jù)存儲(chǔ)到HBase的一個(gè)列簇(column family)中。HBase數(shù)據(jù)庫中在存儲(chǔ)數(shù)據(jù)時(shí)都是使用Bytes數(shù)組存儲(chǔ)的,而大對(duì)象結(jié)構(gòu)很容易轉(zhuǎn)化為此類結(jié)構(gòu);另外,HBase數(shù)據(jù)庫是按照列存儲(chǔ)數(shù)據(jù)的,每列可以有不同的列簇,所以可以將大對(duì)象單獨(dú)存儲(chǔ)到一個(gè)列簇中。這種大對(duì)象存儲(chǔ)方案充分利用了HBase數(shù)據(jù)庫的列存儲(chǔ)特性,實(shí)現(xiàn)簡(jiǎn)單;但是,因?yàn)榇髮?duì)象數(shù)據(jù)的容量比較大,所以存儲(chǔ)到一個(gè)列簇中的大對(duì)象難以避免的會(huì)經(jīng)常進(jìn)行compact操作和split操作,造成讀寫性能不佳。

2) 基于HDFS的大對(duì)象存儲(chǔ)。為避免頻繁的compact操作和split操作,可以不把大對(duì)象直接存儲(chǔ)到HBase數(shù)據(jù)庫中,而是存儲(chǔ)在HBase所依賴的底層文件系統(tǒng)HDFS中。HDFS文件系統(tǒng)中保存了大對(duì)象數(shù)據(jù)本身,而HBase數(shù)據(jù)庫內(nèi)只存儲(chǔ)大對(duì)象文件的索引,如此一來就避免了大量的split操作和compact操作,提高了讀寫性能。

在具體實(shí)現(xiàn)時(shí),可以直接把大對(duì)象數(shù)據(jù)存放為HDFS文件系統(tǒng)的一個(gè)文件,而在HBase數(shù)據(jù)庫中存儲(chǔ)每個(gè)大對(duì)象文件的地址。這種實(shí)現(xiàn)方式實(shí)現(xiàn)簡(jiǎn)單,直接利用HDFS文件系統(tǒng)的put命令即可實(shí)現(xiàn);但是因?yàn)镠DFS文件系統(tǒng)數(shù)據(jù)塊的限制,可能會(huì)產(chǎn)生大量的小文件,所以可能影響HDFS文件系統(tǒng)的讀寫性能,從而間接影響HBase的效率,解決此問題的方法是使用HDFS文件系統(tǒng)自身的sequenceFile[4]。把多個(gè)大對(duì)象數(shù)據(jù)保存在一個(gè)HDFS文件系統(tǒng)的sequenceFile文件中,并將sequenceFile文件的鏈接地址和每個(gè)大對(duì)象的偏移量存儲(chǔ)在HBase數(shù)據(jù)庫內(nèi)。這種方式避免了大量的split操作和compact操作,但由于要存儲(chǔ)每個(gè)大對(duì)象的偏移量,所以不利于管理。

3) 大對(duì)象存儲(chǔ)在定制的HBase列簇中。HBase數(shù)據(jù)庫的列簇可以進(jìn)行定制,以控制在往存儲(chǔ)大對(duì)象的列簇中插入數(shù)據(jù)時(shí)不執(zhí)行compact操作。參數(shù)hbase.hstore.compaction.min可以定制compact操作,當(dāng)某region內(nèi)HFile文件的數(shù)量超過此參數(shù)的值時(shí),會(huì)檢查是否進(jìn)行compact操作,所以對(duì)于存儲(chǔ)大對(duì)象數(shù)據(jù)的列簇,可以將此參數(shù)的值設(shè)置得大一些,這樣在對(duì)此列簇進(jìn)行寫入操作時(shí)就不會(huì)頻繁地進(jìn)行compact操作。這種實(shí)現(xiàn)方式的優(yōu)點(diǎn)是將存儲(chǔ)大對(duì)象的列簇和存儲(chǔ)結(jié)構(gòu)化數(shù)據(jù)的列簇分開,設(shè)置不同的hbase.

hstore.compaction.min參數(shù)值,實(shí)現(xiàn)方便;缺點(diǎn)在于只解決了compact操作帶來的影響,并未解決split操作的影響[5]。定制compact操作的示意如圖2所示。

4 結(jié)論

本文首先介紹了HBase數(shù)據(jù)庫的基本存儲(chǔ)架構(gòu),并說明了HBase數(shù)據(jù)庫中各種存儲(chǔ)結(jié)構(gòu),為研究大對(duì)象的存儲(chǔ)打下理論基礎(chǔ);接下來說明了大對(duì)象在HBase數(shù)據(jù)庫中的存儲(chǔ)方案,并分析了各種存儲(chǔ)方案的優(yōu)勢(shì)和劣勢(shì),為后續(xù)研究并優(yōu)化大對(duì)象在HBase數(shù)據(jù)庫中的存儲(chǔ)提供了一定的參考。

參考文獻(xiàn):

[1] 康毅.HBase大對(duì)象存儲(chǔ)方案的設(shè)計(jì)與實(shí)現(xiàn)[D].南京:南京大學(xué),2013.

[2] 羅燕新.基于HBASE的列存儲(chǔ)壓縮算法的研究與實(shí)現(xiàn)[D].廣州:華南理工大學(xué),2011.

[3] 宋紀(jì)成.海量RDF數(shù)據(jù)存儲(chǔ)與查詢技術(shù)的研究與實(shí)現(xiàn)[D]. 北京:北京工業(yè)大學(xué),2013.

[4] 朱曉麗,趙志剛.一種基于HBase的海量圖片存儲(chǔ)技術(shù)[J].信息系統(tǒng)工程,2013,8(20).

[5] 卓海藝.基于HBase的海量數(shù)據(jù)實(shí)時(shí)查詢系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D]. 北京:北京郵電大學(xué),2013.

平安县| 西安市| 兴山县| 涞水县| 珲春市| 日照市| 梅州市| 石城县| 邛崃市| 木里| 天峨县| 太原市| 惠水县| 迁西县| 汕尾市| 双江| 安平县| 双城市| 左云县| 冀州市| 公主岭市| 石河子市| 民和| 宁强县| 噶尔县| 玉林市| 兴化市| 武乡县| 万州区| 枣阳市| 青州市| 唐山市| 禹城市| 绥芬河市| 武定县| 景谷| 梅河口市| 垦利县| 祁连县| 阿巴嘎旗| 桓台县|