hbase是谷歌bigdata論文的一個代碼實現(xiàn),hbase是開源軟件,在大數(shù)據(jù)處理領域應用廣泛。今天樓主先來介紹一些基本原理,后面用工程代碼方式來敘述API的用法。樓主是新手,如有錯誤,歡迎大家指正。
簡介
Hbase(Hadoop database)是一個高可靠性(數(shù)據(jù)存儲在HDFS文件存儲系統(tǒng)上,十分可靠,有機會樓主再寫HDFS的博文)、高性能(傳統(tǒng)單機數(shù)據(jù)庫在數(shù)據(jù)量高于百萬數(shù)量級后性能很差)、面向列、可伸縮實時讀寫的分布式數(shù)據(jù)庫。
hbase主要用來存儲非結(jié)構(gòu)化和半結(jié)構(gòu)化的松散數(shù)據(jù)。
數(shù)據(jù)結(jié)構(gòu)
首先介紹一下基本概念
row key
決定一行數(shù)據(jù);按照字典順序排序,數(shù)據(jù)有結(jié)構(gòu);row key最大為64K(注意只能存儲字節(jié)數(shù)組,要先轉(zhuǎn)換成字節(jié)數(shù)組才能存入hbase)
time stamp 時間戳
hbase每個cell存儲單元對同一份數(shù)據(jù)由多個版本,根據(jù)時間戳來區(qū)分不同版本,不同版本的數(shù)據(jù)按照時間倒序排列,最新的數(shù)據(jù)排在最前面。時間戳是64為整形數(shù)據(jù),在寫入數(shù)據(jù)時自動賦值(用戶也可以自己給時間戳賦值)。hbase并不會存儲每個時間戳的歷史數(shù)據(jù),由用戶設置一個最大版本數(shù)來約束版本的數(shù)量,多余的版本在合并時被刪除。
column family
(新手可以暫時這樣理解:傳統(tǒng)關(guān)系型數(shù)據(jù)庫里面的列的集合就是hbase里面的列族)hbase把同一列族里面的數(shù)據(jù)存在同一目錄下,一個列族可以有多個列成員(eg:course這個列族可以有以下幾列 math、cs
訪問時,列名為:course:math)
cell
由行和列的坐標決定,單元格是有版本的。
Hbase 表結(jié)構(gòu)

Hbase的存儲機制
1、Hbase 表依賴于HDFS,當數(shù)據(jù)到達一個程度則會切分為一個region。
2、一個用戶的數(shù)據(jù)表會被氣氛為很多個region,然后分別存儲到不同的regionserver上。hbase文件在HDFS上落地成HFile 。
3、HMaster 作為hbase 的管理節(jié)點,HMaster 不負責存儲表數(shù)據(jù),只負責管理regionserver的狀態(tài) 和?regionserver 的負載均衡。

Hbase的尋址機制
1、一張龐大的用戶數(shù)據(jù)表,會被分割為若干個region。每一個region會有一個起始行鍵,和結(jié)束行鍵。
2、每個表所屬的主機,每個region的起始結(jié)束行鍵等信息都會被保存到一個系統(tǒng)表MATE中。一個region就在這張系統(tǒng)表MATE中產(chǎn)生一條記錄。
3、其中MATE可能非常龐大,MATE表也是分布式存儲。一定數(shù)據(jù)量也會形成一個region。相當于計算機系統(tǒng)的分級索引。
4、ROOT表將會保存在一臺RegionServer上。并會記錄在Zookeeper中 。
5、需要尋找一張表的內(nèi)容,Zookeeper? =》 ROOT表 =》MATE表??=》 RegionServer中的region
