Hbase 概述
Hbase 是構件在HDFS上的分布式列存儲系統
Hbase 是基于谷歌Big table 模型開發的,典型的key/value
Hbase 主要用于海量結構化數據存儲
從邏輯上講,Hbase 將數據按照表,行和列進行存儲
Hbase 表的特點
1.大: 一個表有數十億行,上百萬列
2.面向列存儲: 面向列的存儲和權限控制,列族獨立檢索
3.稀疏: 空列不會占用存儲空間,表可以設計的非常稀疏
4.數據多版本:每個單元中的數據可以有多個版本,默認情況下是自動分配,是單元格插入時的時間戳
5.數據類型單一:都是字符串,沒有其他類型
Hbase 數據模型
Hbase 基本概念
1.RowKey 是Byte array ,是表中每條記錄的主鍵,方便快速查找,Rowkey 的設計非常重要
2.Column Famliy 列族,擁有一個名稱(string),包含一個或者多個相關列
3.Column 屬于某一個columnfamliy famliyNode:columnName ,每條記錄可以動態添加
4.Version Number 類型為Long ,默認是系統時間戳,可以由用戶自定義
5.Value :Byte arry
Hbase 物理模型
1.每個column famliy 存儲在HDFS上的一個單獨文件中,空值不會被保存
2.key 和Version number 在每一個column famliy 中均有一份、
3.Hbase 為每個值維護多級索引
物理存儲:
??????????????? 1.Table 中所有行按照row key 的字典排序
??????????????? 2.Table 在行的分割方向上分割為多個Region
??????????????? 3. Region 按大小分割的,每個表開始只有一個Region 隨著數據增多,region 不斷增大,當增大到一個閥值的時候。Region 就會等分成2個Region 之后會有越來越多的Region
???????????????? 4. Region是Hbase 中分布式存儲和負載均衡的最小單元,不同的Region 分布在不同的RegionServer
5、Region雖然是分布式存儲的最小單元,但并不是存儲的最小單元。Region由一個或者多個Store組成,每個store保存一個columns family;每個Strore又由一個memStore和0至多個StoreFile組成,StoreFile包含HFile;memStore存儲在內存中,StoreFile存儲在HDFS上
。
Hbase基本組件說明:
Client
包含訪問HBase的接口,并維護cache來加快對HBase的訪問,比如region的位置信息
Master
為Region server分配region
負責Region server的負載均衡
發現失效的Region server并重新分配其上的region
管理用戶對table的增刪改查操作
Region Server
Regionserver維護region,處理對這些region的IO請求
Regionserver負責切分在運行過程中變得過大的region
Zookeeper作用
通過選舉,保證任何時候,集群中只有一個master,Master與RegionServers 啟動時會向ZooKeeper注冊
存貯所有Region的尋址入口
實時監控Region server的上線和下線信息。并實時通知給Master
存儲HBase的schema和table元數據
默認情況下,HBase 管理ZooKeeper 實例,比如, 啟動或者停止ZooKeeper
Zookeeper的引入使得Master不再是單點故障
該機制用于數據的容錯和恢復:
每個HRegionServer中都有一個HLog對象,HLog是一個實現Write AheadLog的類,在每次用戶操作寫入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使用場景
大數據量存儲,大數據量高并發操作
需要對數據隨機讀寫操作
讀寫訪問均是非常簡單的操作
Hbase與HDFS對比
兩者都具有良好的容錯性和擴展性,都可以擴展到成百上千個節點;
HDFS適合批處理場景
不支持數據隨機查找
不適合增量數據處理
不支持數據更新