Hbase資料儲存圖解與資料檢索流程
Hbase資料儲存圖解與流程
一、Hbase資料儲存圖解
二、hbase表資料的檢索流程圖(讀和寫的流程)
1、hbase在Hadoop叢集中的物理架構
由圖中可以看出,儲存模組主要包括了ZooKeeper叢集、HMaster、HRegionServer。
ZooKeeper:
Hbase是強依賴於ZooKeeper,我們讀或寫一個表的資料,都會優先訪問ZooKeeper。
通常是叢集中單獨的3/5臺伺服器。
HMaster通常是Hadoop叢集中的一臺或兩臺(backup-Master)。
HRegionServer通常是Hadoop叢集中的部分或全部
HRegionServer
比如datanode是10個
HRegionServer可以是10個或小於10個
2、hbase架構圖重要元件的名稱及作用
client:
讀/寫訪問hbase的使用者
ZooKeeper:
基於觀察者模式監控master和regionserver執行狀態,保證hbase的高可用性,這是因為hbase是強依賴於ZooKeeper的。
儲存了hbase的定址入口
儲存了hbase表的meta元資料表的位置資訊
Meta也是一張表,meta表一般只有一個region
region存在哪臺regionserver上
meta元資料表儲存了哪些資訊:
一張表有哪些reigon
region分別分配到哪些regionserve上r
每個reigon的startkey和stopkey的大小
master:
管理regionserver並分配表的region給regionserver
對叢集的region的數量進行負載均衡管理
master會藉助ZooKeeper感知regionserver的上線和下線
master一般會有兩臺(backup-Master),保證master的高可用性
master不參與hbase表資料的讀和寫,負載通常比較低
master宕機一段時間內叢集可以保持正常的讀寫
regionserver:
管理所在伺服器節點上的所有region
負責響應客戶端的讀寫請求(IO)
三大機制(flush、compact、split)
Hlog:
預寫日誌
用來臨時儲存寫入到memstore中的資料,防止宕機造成memstore中的資料丟失
Hadoop:
利用hdfs給hbase提供儲存,hbase是相當於Hadoop的一個客戶端
hdfs上儲存了hbase的兩種資料:
HFile :
hbase表的資料檔案
Hflie檔案是Hadoop的二進位制格式檔案
Hlog :
預寫日誌
Hlog是Hadoop的sequence格式的檔案
3、hbase表資料的寫入流程:(根據rowkey進行寫入)Georgia
A. client先去訪問ZooKeeper,從ZooKeeper上獲取meta表的位置資訊
i. 以前的版本hbase的系統表除了meta表還有root表
ii. 在root表中儲存了meta表的位置資訊
iii. 新版本中將meta表的位置資訊直接存入ZooKeeper中
B. client向meta表的region所在的regionserver發起訪問,讀取meta表的資料,獲取了hbase叢集上所有的表的元資料
C. 根據meta表的元資料資訊(某張表有幾個region及region如何分配及每個reigon的startkey和stopkey),client找到當前要寫入的表對應的region及所在regionserver資訊
D. client向對應的regionserver發起寫入請求
E. regionserver收到client請求並響應,client先把資料寫入到Hlog防止資料丟失
F. 再把資料寫入到memstore記憶體快取區(預設大小128M)
G. 當資料寫入到Hlog及memstore記憶體快取區都成功時,寫入才算成功
H. 當memstore達到128M或其他的因素的觸發,會將memstore中的資料flush成storeFile
I. 當storeFile越來越多,會觸發compact合併,將多個storeFile檔案最終合併成一個檔案
i. 合併分為minor compact 和major compact
ii. 在大合併期間打上‘刪除’標籤的cell或者過期的cell會被統一清理
J. 當某個store下的某個storeFile檔案的最終合併後的大小達到10G時,會觸發整個region的split分割,一個region一分為二,由master進行分配
注意:一個store下面可能有多個storefile
4、hbase表資料的讀流程:(根據rowkey讀)
1、client先去訪問zookeeper,從zookeeper上獲取meta表的位置資訊
以前的版本hbase的系統表除了meta表還有root表
在root表中儲存了meta表的位置資訊
新版本中將meta表的位置資訊直接存入zookeeper中
2、client向meta表的region所在的regionserver發起訪問,讀取meta表的資料,獲取了hbase叢集上所有的表的元資料
3、根據meta表的元資料資訊(某張表有幾個region及region如何分配及每個reigon的startkey和stopkey),client找到當前要寫入的表對應的region及所在regionserver資訊
4、client向對應的regionserver發起讀請求
5、regionserver收到客戶端的讀請求,會先掃描memstore,在掃描blockcache(讀快取),沒有找到資料後再去讀取storeFile檔案
6、regionserver將資料響應給client