概述
hbase是一個(gè)構(gòu)建在hdfs上的分布式列存儲(chǔ)系統(tǒng);
hbase是基于googlebigtable模型開發(fā)的,典型的key/value系統(tǒng);
hbase是apachehadoop生態(tài)系統(tǒng)中的重要一員,主要用于海量結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ);
從邏輯上講,hbase將數(shù)據(jù)按照表、行和列進(jìn)行存儲(chǔ)。
與hadoop一樣,hbase目標(biāo)主要依靠橫向擴(kuò)展,通過不斷增加廉價(jià)的商用服務(wù)器,來增加計(jì)算和存儲(chǔ)能力。
hbase表的特點(diǎn)
大:一個(gè)表可以有數(shù)十億行,上百萬列;
無模式:每行都有一個(gè)可排序的主鍵和任意多的列,列可以根據(jù)需要?jiǎng)討B(tài)的增加,同一張表中不同的行可以有截然不同的列;
面向列:面向列(族)的存儲(chǔ)和權(quán)限控制,列(族)獨(dú)立檢索;
稀疏:空(null)列并不占用存儲(chǔ)空間,表可以設(shè)計(jì)的非常稀疏;
數(shù)據(jù)多版本:每個(gè)單元中的數(shù)據(jù)可以有多個(gè)版本,默認(rèn)情況下版本號(hào)自動(dòng)分配,是單元格插入時(shí)的時(shí)間戳;
數(shù)據(jù)類型單一:hbase中的數(shù)據(jù)都是字符串,沒有類型。
·hbase數(shù)據(jù)模型
hbase邏輯視圖
注意上圖中的英文說明
hbase基本概念
rowkey:是bytearray,是表中每條記錄的“主鍵”,方便快速查找,rowkey的設(shè)計(jì)非常重要。
columnfamily:列族,擁有一個(gè)名稱(string),包含一個(gè)或者多個(gè)相關(guān)列
column:屬于某一個(gè)columnfamily,familyname:columnname,每條記錄可動(dòng)態(tài)添加
versionnumber:類型為long,默認(rèn)值是系統(tǒng)時(shí)間戳,可由用戶自定義
value(cell):bytearray
·hbase物理模型
每個(gè)columnfamily存儲(chǔ)在hdfs上的一個(gè)單獨(dú)文件中,空值不會(huì)被保存。
key和 version number在每個(gè) column family中均有一份;
hbase為每個(gè)值維護(hù)了多級(jí)索引,即:
物理存儲(chǔ):
1、table中所有行都按照rowkey的字典序排列;
2、table在行的方向上分割為多個(gè)region;
3、region按大小分割的,每個(gè)表開始只有一個(gè)region,隨著數(shù)據(jù)增多,region不斷增大,當(dāng)增大到一個(gè)閥值的時(shí)候,region就會(huì)等分會(huì)兩個(gè)新的region,之后會(huì)有越來越多的region;
4、region是hbase中分布式存儲(chǔ)和負(fù)載均衡的最小單元,不同region分布到不同regionserver上。
5、region雖然是分布式存儲(chǔ)的最小單元,但并不是存儲(chǔ)的最小單元。region由一個(gè)或者多個(gè)store組成,每個(gè)store保存一個(gè)columnsfamily;每個(gè)strore又由一個(gè)memstore和0至多個(gè)storefile組成,storefile包含hfile;memstore存儲(chǔ)在內(nèi)存中,storefile存儲(chǔ)在hdfs上。
·hbase架構(gòu)及基本組件
hbase基本組件說明:
client
ü包含訪問hbase的接口,并維護(hù)cache來加快對(duì)hbase的訪問,比如region的位置信息
master
ü為regionserver分配region
ü負(fù)責(zé)regionserver的負(fù)載均衡
ü發(fā)現(xiàn)失效的regionserver并重新分配其上的region
ü管理用戶對(duì)table的增刪改查操作
regionserver
üregionserver維護(hù)region,處理對(duì)這些region的io請(qǐng)求
üregionserver負(fù)責(zé)切分在運(yùn)行過程中變得過大的region
zookeeper作用
ü通過選舉,保證任何時(shí)候,集群中只有一個(gè)master,master與regionservers啟動(dòng)時(shí)會(huì)向zookeeper注冊(cè)
ü存貯所有region的尋址入口
ü實(shí)時(shí)監(jiān)控regionserver的上線和下線信息。并實(shí)時(shí)通知給master
ü存儲(chǔ)hbase的schema和table元數(shù)據(jù)
ü默認(rèn)情況下,hbase管理zookeeper 實(shí)例,比如, 啟動(dòng)或者停止zookeeper
üzookeeper的引入使得master不再是單點(diǎn)故障
write-ahead-log(wal)
該機(jī)制用于數(shù)據(jù)的容錯(cuò)和恢復(fù):
每個(gè)hregionserver中都有一個(gè)hlog對(duì)象,hlog是一個(gè)實(shí)現(xiàn)writeaheadlog的類,在每次用戶操作寫入memstore的同時(shí),也會(huì)寫一份數(shù)據(jù)到hlog文件中(hlog文件格式見后續(xù)),hlog文件定期會(huì)滾動(dòng)出新的,并刪除舊的文件(已持久化到storefile中的數(shù)據(jù))。當(dāng)hregionserver意外終止后,hmaster會(huì)通過zookeeper感知到,hmaster首先會(huì)處理遺留的hlog文件,將其中不同region的log數(shù)據(jù)進(jìn)行拆分,分別放到相應(yīng)region的目錄下,然后再將失效的region重新分配,領(lǐng)取到這些region的hregionserver在load region的過程中,會(huì)發(fā)現(xiàn)有歷史hlog需要處理,因此會(huì)replayhlog中的數(shù)據(jù)到memstore中,然后flush到storefiles,完成數(shù)據(jù)恢復(fù)
hbase容錯(cuò)性
master容錯(cuò):zookeeper重新選擇一個(gè)新的master
ü無master過程中,數(shù)據(jù)讀取仍照常進(jìn)行;
ü無master過程中,region切分、負(fù)載均衡等無法進(jìn)行;
regionserver容錯(cuò):定時(shí)向zookeeper匯報(bào)心跳,如果一旦時(shí)間內(nèi)未出現(xiàn)心跳,master將該regionserver上的region重新分配
到其他regionserver上,失效服務(wù)器上“預(yù)寫”日志由主服務(wù)器進(jìn)行分割并派送給新的regionserver
zookeeper容錯(cuò):zookeeper是一個(gè)可靠地服務(wù),一般配置3或5個(gè)zookeeper實(shí)例
region定位流程:
尋找regionserver
zookeeper-->-root-(單region)-->.meta.-->用戶表
-root-
ü表包含.meta.表所在的region列表,該表只會(huì)有一個(gè)region;
üzookeeper中記錄了-root-表的location。
.meta.
ü表包含所有的用戶空間region列表,以及regionserver的服務(wù)器地址。
·hbase使用場(chǎng)景
1
2
3
4
5
6
|
storing large amounts of data(100s oftbs) needhigh write throughput needefficient random access(key lookups) within large datasets needto scale gracefully with data forstructured and semi-structured data don'tneed fullrdms capabilities(cross row /cross table transaction,joins,etc.) |
大數(shù)據(jù)量存儲(chǔ),大數(shù)據(jù)量高并發(fā)操作
需要對(duì)數(shù)據(jù)隨機(jī)讀寫操作
讀寫訪問均是非常簡(jiǎn)單的操作
·hbase與hdfs對(duì)比
兩者都具有良好的容錯(cuò)性和擴(kuò)展性,都可以擴(kuò)展到成百上千個(gè)節(jié)點(diǎn);
hdfs適合批處理場(chǎng)景
不支持?jǐn)?shù)據(jù)隨機(jī)查找
不適合增量數(shù)據(jù)處理
不支持?jǐn)?shù)據(jù)更新
原文鏈接:http://blog.sina.com.cn/s/blog_9c6852670102wx06.html