HBase基礎(chǔ)知識,面向列的實時分布式數(shù)據(jù)庫
1、HBase定義
HBase是一個分布式的、面向列的開源數(shù)據(jù)庫,該技術(shù)來源于 Fay Chang 所撰寫的Google論文“Bigtable:一個結(jié)構(gòu)化數(shù)據(jù)的分布式存儲系統(tǒng)”。就像Bigtable利用了Google文件系統(tǒng)(File System)所提供的分布式數(shù)據(jù)存儲一樣,HBase在Hadoop之上提供了類似于Bigtable的能力。HBase是Apache的Hadoop項目的子項目。HBase不同于一般的關(guān)系數(shù)據(jù)庫,它是一個適合于非結(jié)構(gòu)化數(shù)據(jù)存儲的數(shù)據(jù)庫。另一個不同的是HBase基于列的而不是基于行的模式。
2、HBase特性:
- 高可靠性
- 高效性
- 面向列
- 可伸縮
- 可在廉價PC Server搭建大規(guī)模結(jié)構(gòu)化存儲集群
3、HBase與RDBMS的對比
HBase適合于非結(jié)構(gòu)化數(shù)據(jù)存儲的數(shù)據(jù)庫。介于Map Entry 和 DB row之間的一種數(shù)據(jù)存儲方式。而RDBMS是一個遵循“Codd的十二條規(guī)律”的數(shù)據(jù)庫。主要區(qū)別如下:
數(shù)據(jù)類型: HBase只有簡單的字符串類型,它只保存字符串所有的類型都是交給用戶自己處理。關(guān)系型數(shù)據(jù)庫可以選擇類型
數(shù)據(jù)操作: HBase操作只有很簡單的插入、查詢等操作,表與表之間是分離的,沒有join
存儲模式: HBase基于列存儲,每個列族由幾個文件保存,不同列族的文件是分離的。傳統(tǒng)的關(guān)系數(shù)據(jù)庫是基于表格結(jié)構(gòu)和行模式保存的
數(shù)據(jù)維護: HBase更新操作時,舊的版本仍然保留,實際上時插入了新數(shù)據(jù)。傳統(tǒng)關(guān)系數(shù)據(jù)庫是替換修改
可伸縮性: HBase能夠容易的增加或者減少硬件數(shù)量
4、數(shù)據(jù)模型
組成部件說明:
Row Key:Table主鍵行鍵Table中記錄按照Row Key排序;
Timestamp:每次對數(shù)據(jù)操作對應(yīng)的時間戳,也即數(shù)據(jù)的version number;
Column Family: 列簇,一個table在水平方向有一個或者多個列簇,列簇可由任意多個Column組成,列簇支持動態(tài)擴展,無須預(yù)定義數(shù)量及類型,二進制存儲,用戶需自行進行類型轉(zhuǎn)換。
5、系統(tǒng)架構(gòu)
組成部件說明
Client:
使用HBase RPC機制與HMaster和HRegionServer進行通信
Client與HMaster進行通信進行管理類操作
Client與HRegionServer進行數(shù)據(jù)讀寫類操作
Zookeeper:
Zookeeper Quorum存儲-ROOT-表地址、HMaster地址
HRegionServer把自己以Ephedral方式注冊到Zookeeper中,HMaster隨時感知各個HRegionServer的健康狀況
Zookeeper避免HMaster單點問題
HMaster:
HMaster沒有單點問題,HBase中可以啟動多個HMaster,通過Zookeeper的Master Election機制保證總有一個Master在運行
主要負責(zé)Table和Region的管理工作:
1 管理用戶對表的增刪改查操作
2 管理HRegionServer的負載均衡,調(diào)整Region分布
3 Region Split后,負責(zé)新Region的分布
4 在HRegionServer停機后,負責(zé)失效HRegionServer上Region遷移
HRegionServer:
HBase中最核心的模塊,主要負責(zé)響應(yīng)用戶I/O請求,向HDFS文件系統(tǒng)中讀寫數(shù)據(jù)
6、表的設(shè)計
在表結(jié)構(gòu)設(shè)計時,HBase里有tall narrow和flat wide兩種設(shè)計模式,前者行多列少,整個表結(jié)構(gòu)高且窄;后者行少列多,表結(jié)構(gòu)平且寬;但是由于HBase只能在行的邊界做split,因此如果選擇flat wide的結(jié)構(gòu),那么在特殊行變的超級大(超過file或region的上限)時,那么這種行為會導(dǎo)致compaction,而這樣做是要把row讀內(nèi)存的~~因此,強烈推薦使用tall narrow模式設(shè)計表結(jié)構(gòu),這樣結(jié)構(gòu)更趨近于keyvalue,性能更好。
本文參考hbase.apache 轉(zhuǎn)載請注明轉(zhuǎn)載自慧都控件網(wǎng)