1.HBase概述
HBase是一個開源的非關(guān)系型分布式數(shù)據(jù)庫(NoSQL),它參考了谷歌的BigTable建模,實現(xiàn)的編程語言為 Java。它是Apache軟件基金會的Hadoop項目的一部分,運行于HDFS文件系統(tǒng)之上,為 Hadoop 提供類似于BigTable 規(guī)模的服務(wù),可以存儲海量稀疏的數(shù)據(jù),并具備一定的容錯性、高可靠性及伸縮性。主要應(yīng)用場景是實時隨機讀寫超大規(guī)模的數(shù)據(jù)。
HBase在列上實現(xiàn)了BigTable論文提到的壓縮算法、內(nèi)存操作和布隆過濾器。HBase的表能夠作為MapReduce任務(wù)的輸入和輸出,可以通過Java API來存取數(shù)據(jù),也可以通過REST、Avro或者Thrift的API來訪問。
HBase不能取代RDBMS,因為二者的應(yīng)用場景不同。HBase為了解決海量數(shù)據(jù)的擴展性,支持簡單的增加節(jié)點來實現(xiàn)線性擴展,從而在集群上管理海量的非結(jié)構(gòu)化或半結(jié)構(gòu)化的稀疏數(shù)據(jù)。HBase僅能通過主鍵(raw key)或主鍵的range檢索數(shù)據(jù),支持單行事務(wù)

上圖描述Hadoop EcoSystem中的各層系統(tǒng)。其中,HBase位于結(jié)構(gòu)化存儲層,Hadoop HDFS為HBase提供了高可靠性的底層存儲支持,Hadoop MapReduce為HBase提供了高性能的計算能力,Zookeeper為HBase提供了穩(wěn)定服務(wù)和failover機制。
此外,Pig和Hive還為HBase提供了高層語言支持,使得在HBase上進行數(shù)據(jù)統(tǒng)計處理變的非常簡單。 Sqoop則為HBase提供了方便的RDBMS數(shù)據(jù)導(dǎo)入功能,使得傳統(tǒng)數(shù)據(jù)庫數(shù)據(jù)向HBase中遷移變的非常方便
2.HBase數(shù)據(jù)模型

- 行健(Row Key):表的主鍵,表中的記錄默認(rèn)按照行健升序排序
- 時間戳(Timestamp):每次數(shù)據(jù)操作對應(yīng)的時間戳,可以看作是數(shù)據(jù)的版本號
- 列族(Column Family):表在水平方向有一個或者多個列族組成,一個列族中可以由任意多個列組成,列族支持動態(tài)擴展,無需預(yù)先定義列的數(shù)量以及類型,所有列均以二進制格式存儲,用戶需要自行進行類型轉(zhuǎn)換。所有的列族成員的前綴是相同的,例如“abc:a1”和“abc:a2”兩個列都屬于abc這個列族。
- 表和區(qū)域(Table&Region):當(dāng)表隨著記錄數(shù)不斷增加而變大后,會逐漸分裂成多份,成為區(qū)域,一個區(qū)域是對表的水平劃分,不同的區(qū)域會被Master分配給相應(yīng)的RegionServer進行管理
- 單元格(Cell):表存儲數(shù)據(jù)的單元。由{行健,列(列族:標(biāo)簽),時間戳}唯一確定,其中的數(shù)據(jù)是沒有類型的,以二進制的形式存儲。
3.HBase架構(gòu)

如上圖所示,HBase架構(gòu)中只有一個Master節(jié)點,稱HMaster,還有多臺RegionServer成為HRegionServer,每個RegionServer包含多個Region。
- HBase訪問接口:Java,REST,Thrift等
- Master:集群的管理服務(wù)器,為RegionServer分配Region,負(fù)責(zé) RegionServer的負(fù)載均衡,處理schema更新請求
- RegionServer:管理HBase的數(shù)據(jù)存儲,維護Region,處理IO請求。
- Zookeeper:保證集群的高可用性、存儲Region的尋址入口,并實時監(jiān)控RegionServer的狀態(tài),存儲HBase的Schema。
可以看到,client訪問hbase上數(shù)據(jù)的過程并不需要Master參與(尋址訪問Zookeeper和RegionServer,數(shù)據(jù)讀寫訪問RegionServer),Master僅僅維護Table和Region的元數(shù)據(jù)信息,負(fù)載很低。
4.HBase訪問接口
- Native Java API,最常規(guī)和高效的訪問方式,適合Hadoop MapReduce Job并行批處理HBase表數(shù)據(jù)
- HBase Shell,HBase的命令行工具,最簡單的接口,適合HBase管理使用
- Thrift Gateway,利用Thrift序列化技術(shù),支持C++,PHP,Python等多種語言,適合其他異構(gòu)系統(tǒng)在線訪問HBase表數(shù)據(jù)
- REST Gateway,支持REST 風(fēng)格的Http API訪問HBase, 解除了語言限制
- Pig,可以使用Pig Latin流式編程語言來操作HBase中的數(shù)據(jù),和Hive類似,本質(zhì)最終也是編譯成MapReduce Job來處理HBase表數(shù)據(jù),適合做數(shù)據(jù)統(tǒng)計
5.HBase存儲格式
HBase中的所有數(shù)據(jù)文件都存儲在Hadoop HDFS文件系統(tǒng)上,主要包括上述提出的兩種文件類型:
- HFile, HBase中KeyValue數(shù)據(jù)的存儲格式,HFile是Hadoop的二進制格式文件,實際上StoreFile就是對HFile做了輕量級包裝,即StoreFile底層就是HFile
- HLogFile,HBase中WAL(Write Ahead Log) 的存儲格式,物理上是Hadoop的Sequence File
5.HBase應(yīng)用場景
HBase的優(yōu)勢主要在以下幾方面:
- 海量數(shù)據(jù)存儲
- 快速隨機訪問
- 大量寫操作的應(yīng)用
- 常見的應(yīng)用場景
互聯(lián)網(wǎng)搜索引擎數(shù)據(jù)存儲(BigTable要解決的問題)
- 審計日志系統(tǒng)
- 實時系統(tǒng)
- 消息中心
- 內(nèi)容服務(wù)系統(tǒng)
轉(zhuǎn)載來源:https://www.shiyanlou.com