摘要:傳統(tǒng)的RDBMS關(guān)系型數(shù)據(jù)庫存儲(chǔ)一定量數(shù)據(jù)時(shí)進(jìn)行數(shù)據(jù)檢索沒有問題,可當(dāng)數(shù)據(jù)量上升到非常巨大規(guī)模的數(shù)據(jù)(TB或PB)級(jí)別時(shí),傳統(tǒng)的RDBMS已無法支撐,這時(shí)候就需要一種新型的數(shù)據(jù)庫系統(tǒng)更好更快的處理這些數(shù)據(jù)。我們選擇了HBase
關(guān)鍵詞:HBase;數(shù)據(jù)存儲(chǔ);數(shù)據(jù)庫
HBase——Hadoop Database 是一個(gè)高可靠性、高性能、面向列、可伸縮的分布式存儲(chǔ)系統(tǒng),利用HBase技術(shù)可在廉價(jià)PC Server上搭建起大規(guī)模結(jié)構(gòu)化存儲(chǔ)集群,它的技術(shù)來源于Fay Chang所撰寫的Google論文“BigTable”:一個(gè)結(jié)構(gòu)化數(shù)據(jù)的分布式存儲(chǔ)系統(tǒng)。HBase不同于一般的關(guān)系數(shù)據(jù)庫,它是一個(gè)適合于非結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)的數(shù)據(jù)庫,另一個(gè)不同就是它是基于列的而不是基于行的模式。
HBase是水平擴(kuò)展的、分布式的、開源有序映射數(shù)據(jù)庫,它運(yùn)行在Hadoop文件系統(tǒng)HDFS上,它不要求有預(yù)定義的模式,可以被看做彈性擴(kuò)展的多維表格,通過動(dòng)態(tài)添加列,在數(shù)據(jù)插入或查詢之前修改列結(jié)構(gòu),以支持任意類型的數(shù)據(jù)結(jié)構(gòu)。由于HBase運(yùn)行在HDFS上,理論上HDFS有多少個(gè)節(jié)點(diǎn)就可以配置多少個(gè)HBase,因此,HBase非常適合存儲(chǔ)海量數(shù)據(jù)
上圖為HBase的架構(gòu)設(shè)計(jì),Master為HBase的主節(jié)點(diǎn),用來協(xié)調(diào)客戶端應(yīng)用程序和RegionServer的關(guān)系,同時(shí)用來監(jiān)控和記錄元數(shù)據(jù)的變化和管理;RegionServer是從節(jié)點(diǎn),用region的形式處理實(shí)際的表,region是HBase表的基礎(chǔ)單元組件,它存儲(chǔ)了分布式表,所以HBase表和HBase集群利用Master和RegionServer來協(xié)同工作;Zookeeper是一個(gè)高性能、集中化、分布式應(yīng)用程序協(xié)調(diào)服務(wù),它為HBase提供了分布式同步和組服務(wù),在HBase中它用來選舉主節(jié)點(diǎn)Master以便跟蹤可用的在線服務(wù)器同時(shí)維護(hù)集群的元數(shù)據(jù),一般安裝多個(gè)用于提高M(jìn)aster的高可用。為了便于理解,可以把Master看做namenode,把RegionServer看做datanode,因?yàn)樗鼈冊(cè)贖Base中的作用和namenode、datanode在HDFS中的作用相似,注意,這樣的比喻僅僅為了方便初學(xué)理解,實(shí)際還是有著很大的不同。
一個(gè)HBase表由以下幾部分組成
行鍵:是HBase表中每個(gè)記錄的唯一值,無論選擇什么類型數(shù)據(jù)作為行鍵,它在內(nèi)部、磁盤或內(nèi)存里都將轉(zhuǎn)換為字節(jié)數(shù)組進(jìn)行存儲(chǔ),表中的每條數(shù)據(jù)都有唯一的標(biāo)識(shí)符,即rowkey,相當(dāng)于關(guān)系型數(shù)據(jù)庫表中的主鍵
列簇:一張HBase表由表的不同列集合在一起。將相同功能或類型的列分類組合在一起,這樣做的好處是可以更快的分開存儲(chǔ)在HBase磁盤上的列簇中檢索出所需的列
列:屬于某一個(gè)列簇,相當(dāng)于關(guān)系型數(shù)據(jù)庫表中的非主屬性字段
HBase沒有花哨的數(shù)據(jù)類型,它的所有數(shù)據(jù)都是字節(jié)數(shù)組。它是一種字節(jié)進(jìn)字節(jié)出的數(shù)據(jù)庫,其特征在于,當(dāng)插入一個(gè)值時(shí),HBase隱式的通過序列化框架將數(shù)據(jù)轉(zhuǎn)化成字節(jié)數(shù)組,然后存儲(chǔ)進(jìn)單元格或者給出字節(jié)數(shù)組,當(dāng)獲取數(shù)據(jù)的時(shí)候,它在隱式的轉(zhuǎn)化成等價(jià)的數(shù)據(jù)展示出來。單元格是HBase表最小的存儲(chǔ)單元,在內(nèi)部是一個(gè)列的實(shí)際值存儲(chǔ),因此一個(gè)單元格的數(shù)據(jù)由行鍵+列簇名+列名+時(shí)間戳:實(shí)際值組成
HBase在實(shí)際存儲(chǔ)中,是按照列進(jìn)行存儲(chǔ)的,所有每一個(gè)列簇存儲(chǔ)在單獨(dú)的一個(gè)HDFS文件上。一張HBase表的行都是按照rowkey字典序進(jìn)行排列的,并且表格在行的方向上被分隔為多個(gè)region,region是HBase中分布式存儲(chǔ)和負(fù)載均衡的最小單元,不同的region分布到不同RegionServer中,也就是說,一個(gè)RegionServer中可以包含多個(gè)來自不同HBase表的region。
Region雖然是最小的分布式存儲(chǔ)的最小單元,但卻不是存儲(chǔ)的最小單元。Region由一個(gè)或多個(gè)store組成,每個(gè)store保存一個(gè)列簇,每個(gè)store又由一個(gè)memstore(存儲(chǔ)在內(nèi)存中,是內(nèi)存中的寫入緩沖區(qū),寫入的數(shù)據(jù)會(huì)預(yù)先存儲(chǔ)在其中)和零到多個(gè)的storefile(存儲(chǔ)在HDFS上,存儲(chǔ)的最小單元是它里面的HFile)組成。
作者簡(jiǎn)介:
沈成龍,1996年11月,男,漢,浙江省臺(tái)州人,本科,學(xué)生,研究方向:計(jì)算機(jī)科學(xué)與技術(shù)