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