總體框架
![](http://static.javashuo.com/static/loading.gif)
使用 ZooKeeper 框架協助 RegionServer(相似於HDFS的nodemanager)用戶請求從 Client 到 Zookeeper 進行判斷數據屬於哪個 Region 輔助 HBase 進行數據存儲/檢索
主節點 Master (相似HDFS的ResourceManager) 管理 RegionServer ,數據不通過 Masterjava
物理模型
![](http://static.javashuo.com/static/loading.gif)
- Table中多有行按照RowKey字典順序排列
- Table在行的方向上分割爲多個Region
![](http://static.javashuo.com/static/loading.gif)
- 隨着Region大小的增大,達到必定閾值的時候,會分裂成兩個新的Region
- Table在行的方向上分割爲多個Region
數據寫入流程:put
- Wal(Write Ahead Log) 預寫日誌(HLog)文件(HDFS/Hbase/目錄下):這個是修改日誌,不是整個文件?就像git同樣?
- memStore
- storeFile
完整架構圖HBase Architecture
![](http://static.javashuo.com/static/loading.gif)
數據存儲
客戶端 -> Zookeeper -> 獲得 hbase:meta 表的 RegionServer -> 客戶端從 meta 表中查得用戶所需表的 RegionServer -> put/get/scan ...node
1.nameSpace:相似於 RDBMS 中 Database 概念,用戶建立的表在 default namespace 下 ,系統自帶表在 hbase namespace 下
hbase:namespace 表存儲了 namespace 信息
# 顯示全部 namespace
> list_namespace
# 顯示 namespace 下的表
> list_namespace_tables 'hbase'
# 使用 hbase namespace 下的表 hbase:meta
> scan 'hbase:meta'
2.表數據存儲位置:hdfs://HBase/data/
HFile:HBase中KeyValue數據的存儲格式,是 Hadoop 的二進制文件格式,是 StoreFile 的輕量級包裝
HLog File:(Write Ahead Log) 預寫日誌(HLog)文件,在物理上是 Hadoop 的 Sequence File
3.預寫日誌文件目錄:hdfs://HBase/wals/
4.Zookeeper 做用:用戶申請數據首先通過 Zookeeper,Zokkeeper 中存儲了 mate 所在的 Region 被哪個 RegionServer 管理的信息。Hmaster 管理 RegionServer 的信息存儲在 Zookeeper 中
# 查看mate-server(bin/zkCli.sh)
$ get /hbase/meta-region-server
# 查看 RegionServer 信息(分文件夾存儲)
$ ls /hbase/rs
人工干預數據的讀寫
# 從 memStore 到 Hfile
$ flush 'tablename'
# 合併小文件
$ compact 'tablename'
各個組件的功能和做用(參考JAVA API 導包)
Client
- 整個集羣的訪問入口
- 使用 HBase RPC(Remote Procedure Call Protocol)——遠程過程調用協議 與 HMAster 和 HRegionServer 進行通訊
- 與 HMAster 進行通訊,進行管理類操做(建立表,刪除表...)
- 與 HRegionServer 進行數據讀寫類操做(put get ...)
- 包含訪問 HBase 的接口,並維護 cache(緩存) 來加快對 HBase 的訪問
Zookeeper
- 經過 Zookeeper 協做,容許開啓/存在多個 HMaster 但 Zookeeper 經過 Master Election 保證了任什麼時候候,集羣中只有一個 HMaster
- 保存了全部的 HRegion 的尋址入口(Client 訪問 Zookeeper 找到 Region 的信息)
- 實時監控 HRegionServer 的上線和下線信息,並通知給 HMaster
- 存儲了 HBase 的全部表信息的元數據信息 namespace 的信息
- 存儲了 meta 表和 HMaster 的地址
HMaster
- HMaster 不存在單點問題,HBase 中能夠啓動多個 HMaster (詳情請看bin/master-backup.sh)經過 Zookeeper 經過 Master Election 保證了任什麼時候候,集羣中只有一個 HMaster 在運行,負責 Table 和 Region 的管理工做
- 管理用戶對 Table 的增刪改查操做
- 管理 HRegionServer 的負載平衡,調整 Region 分佈
- Region Split 後,負責新 Region 的分佈
- 在 HRegionServer 停機後,負責失效 HRegionServer 的 Region 轉移工做
HRegionServer
- 維護 HRegion 處理 HRegion 的 IO 請求,向 HDFS 文件系統中讀寫數據
- 負責 Region Split ,以後再交給 HMaster 調整 Region 分佈
- 負責數據的訪問過程,數據不通過 HMater ,HMaster 僅僅維護 Table 和 Region 的元數據信息,負載很低<<尋址訪問 Zookeeper 和 HRegionServer ,數據訪問 HRegionServer >>(重點)