[官方文檔]http://hbase.apache.org/book.html#regions.arch
[模型論文]http://0b4af6cdc2f0c5998459-c0245c5c937c5dedcca3f1764ecc9b2f.r43.cf2.rackcdn.com/9353-login1210_khurana.pdf
大數(shù)據(jù)量存儲,大數(shù)據(jù)量高并發(fā)操作
需要對數(shù)據(jù)隨機讀寫操作
讀寫訪問均是非常簡單的操作
1.HBase數(shù)據(jù)模型術(shù)語
Table(表格)
一個HBase表格由多行組成。
Row(行)
HBase中的行里面包含一個key和一個或者多個包含值的列。行按照行的key字母順序存儲在表格中抑进。因為這個原因找爱,行的key的設(shè)計就顯得非常重要唆铐。數(shù)據(jù)的存儲目標(biāo)是相近的數(shù)據(jù)存儲到一起走趋。一個常用的行的key的格式是網(wǎng)站域名。如果你的行的key是域名核芽,你應(yīng)該將域名進行反轉(zhuǎn)(org.apache.www, org.apache.mail, org.apache.jira)再存儲。這樣的話酵熙,所有Apache域名將會存儲在一起轧简,好過基于子域名的首字母分散在各處。
Column(列)
HBase中的列包含用:分隔開的列族和列的限定符匾二。
Column Family(列族)
因為性能的原因哮独,列族物理上包含一組列和它們的值。每一個列族擁有一系列的存儲屬性
察藐,例如值是否緩存在內(nèi)存中皮璧,數(shù)據(jù)是否要壓縮或者他的行key是否要加密等等。表格中的每一行擁有相同的列族转培,盡管一個給定的行可能沒有存儲任何數(shù)據(jù)在一個給定的列族中恶导。
Column Qualifier(列的限定符)
列的限定符是列族中數(shù)據(jù)的索引。例如給定了一個列族content浸须,那么限定符可能是content:html惨寿,也可以是content:pdf邦泄。列族在創(chuàng)建表格時是確定的了,但是列的限定符是動態(tài)地并且行與行之間的差別也可能是非常大的裂垦。
Cell(單元)
單元是由行
顺囊、列族
、列限定符
蕉拢、值
和代表值版本的時間戳
組成的特碳。
Timestamp(時間戳)
時間戳是寫在值旁邊的一個用于區(qū)分值的版本的數(shù)據(jù)。默認情況下晕换,時間戳表示的是當(dāng)數(shù)據(jù)寫入時RegionSever的時間點午乓,但你也可以在寫入數(shù)據(jù)時指定一個不同的時間戳。
2.概念視圖
一個名為webable的表格闸准,表格中有兩行(com.cnn.www 和 com.example.www)和三個列族(contents, anchor, 和 people)益愈。在這個例子當(dāng)中,第一行(com.cnn.www)中anchor包含兩列(anchor:cssnsi.com, anchor:my.look.ca)和content包含一列(contents:html)夷家。這個例子中com.cnn.www擁有5個版本而com.example.www有一個版本蒸其。contents:html列中包含給定網(wǎng)頁的整個HTML。anchor限定符包含能夠表示行的站點以及鏈接中文本库快。People列族表示跟站點有關(guān)的人摸袁。
在HBase中,表格中的單元如果是空將不占用空間或者事實上不存在义屏。這就使得HBase看起來“稀疏”靠汁。
下面的方式以多維度映射的方式來表達相同的信息。下面只是一個用于說明目的的模型可能不是百分百的精確湿蛔。
{
"com.cnn.www": {
contents: {
t6: contents:html: "<html>..."
t5: contents:html: "<html>..."
t3: contents:html: "<html>..."
}
anchor: {
t9: anchor:cnnsi.com = "CNN"
t8: anchor:my.look.ca = "CNN.com"
}
people: {}
}
"com.example.www": {
contents: {
t5: contents:html: "<html>..."
}
anchor: {}
people: {
t5: people:author: "John Doe"
}
}
}
```
####2.物理視圖
盡管一個概念層次的表格可能看起來是由一些列稀疏的行組成膀曾,但他們是通過**列族來存儲**的。一個新建的限定符(column_family:column_qualifier)可以隨時地添加到已存在的列族中阳啥。
![Paste_Image.png](http://upload-images.jianshu.io/upload_images/2061490-62349c9b0833d1a7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
概念視圖中的空單元實際上是沒有進行存儲的添谊。因此對于返回時間戳為t8的contents:html的值的請求,結(jié)果為空察迟。同樣的斩狱,一個返回時間戳為t9的anchor:my.look.ca的值的請求,結(jié)果也為空扎瓶。然而所踊,如果沒有指定時間戳的話,那么會返回特定列的最新值概荷。對有多個版本的列秕岛,優(yōu)先返回最新的值,因為時間戳是按照遞減順序存儲的。因此對于一個返回com.cnn.www里面所有的列的值并且沒有指定時間戳的請求继薛,返回的結(jié)果會是時間戳為t6的contents:html 的值修壕、時間戳 t9的anchor:cnnsi.com f的值和時間戳t8的 anchor:my.look.ca 。
####物理存儲
![Paste_Image.png](http://upload-images.jianshu.io/upload_images/2061490-5788eaad8f2d5718.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![Paste_Image.png](http://upload-images.jianshu.io/upload_images/2061490-c505aabb2f3dbe1b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
```
1.Table 中所有行按照row key 的字典排序
2.Table 在行的分割方向上分割為多個Region
3. Region 按大小分割的遏考,每個表開始只有一個Region 隨著數(shù)據(jù)增多慈鸠,region 不斷增大,當(dāng)增
大到一個閥值的時候灌具。Region 就會等分成2個Region 之后會有越來越多的Region
4. Region是Hbase 中分布式存儲和負載均衡的最小單元青团,不同的Region 分布在不同的RegionServer
5.Region雖然是分布式存儲的最小單元,但并不是存儲的最小單元咖楣。Region由一個或者多個Store組成督笆,每個store保存一個columns family;每個Strore又由一個memStore和0至多個StoreFile組成截歉,StoreFile包含HFile胖腾;memStore存儲在內(nèi)存中,StoreFile存儲在HDFS上
```
####2.Hbase基本組件
![Paste_Image.png](http://upload-images.jianshu.io/upload_images/2061490-b7893a723c270adb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
######Client
包含訪問HBase的接口瘪松,并維護cache來加快對HBase的訪問,比如region的位置信息
######Master
為Region server分配region
負責(zé)Region server的負載均衡
發(fā)現(xiàn)失效的Region server并重新分配其上的region
管理用戶對table的增刪改查操作
######Region Server
Regionserver維護region锨阿,處理對這些region的IO請求
Regionserver負責(zé)切分在運行過程中變得過大的region
######Zookeeper作用
通過選舉宵睦,保證任何時候,集群中只有一個master墅诡,Master與RegionServers 啟動時會向ZooKeeper注冊
存貯所有Region的尋址入口
實時監(jiān)控Region server的上線和下線信息壳嚎。并實時通知給Master
存儲HBase的schema和table元數(shù)據(jù)
默認情況下,HBase 管理ZooKeeper 實例末早,比如烟馅, 啟動或者停止ZooKeeper
Zookeeper的引入使得Master不再是單點故障
![Paste_Image.png](http://upload-images.jianshu.io/upload_images/2061490-aaae5aa526297252.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![Paste_Image.png](http://upload-images.jianshu.io/upload_images/2061490-fb1ce199ca026ebd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
**該機制用于數(shù)據(jù)的容錯和恢復(fù):**
每個HRegionServer中都有一個HLog對象,HLog是一個實現(xiàn)Write AheadLog的類然磷,在每次用戶操作寫入MemStore的同時郑趁,也會寫一份數(shù)據(jù)到HLog文件中(HLog文件格式見后續(xù)),HLog文件定期會滾動出新的姿搜,并刪除舊的文件(已持久化到StoreFile中的數(shù)據(jù))寡润。當(dāng)HRegionServer意外終止后,HMaster會通過Zookeeper感知到舅柜,HMaster首先會處理遺留的HLog文件梭纹,將其中不同Region的Log數(shù)據(jù)進行拆分,分別放到相應(yīng)region的目錄下致份,然后再將失效的region重新分配变抽,領(lǐng)取到這些region的HRegionServer在Load Region的過程中,會發(fā)現(xiàn)有歷史HLog需要處理,因此ReplayHLog中的數(shù)據(jù)到MemStore中绍载,然后flush到StoreFiles诡宗,完成數(shù)據(jù)恢復(fù)
**HBase容錯性**
Master容錯:Zookeeper重新選擇一個新的Master
無Master過程中,數(shù)據(jù)讀取仍照常進行逛钻;
無master過程中僚焦,region切分、負載均衡等無法進行曙痘;
**RegionServer容錯:**
定時向Zookeeper匯報心跳芳悲,如果一旦時間內(nèi)未出現(xiàn)心跳,Master將該RegionServer上的Region重新分配到其他RegionServer上边坤,失效服務(wù)器上“預(yù)寫”日志由主服務(wù)器進行分割并派送給新的RegionServer
***Region定位流程:***
![Paste_Image.png](http://upload-images.jianshu.io/upload_images/2061490-157984e2dc5fcfe5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
**(1)尋找RegionServer**
ZooKeeper-->-ROOT-(單Region)-->.META.-->用戶表
**(2)-ROOT-**
表包含.META.表所在的region列表名扛,該表只會有一個Region;
Zookeeper中記錄了-ROOT-表的location茧痒。
**(3).META.**
表包含所有的用戶空間region列表肮韧,以及RegionServer的服務(wù)器地址。