一、Hbase數據存儲圖解
![Hbase數據存儲圖解與數據檢索流程](http://p2.ttnews.xyz/loading.gif)
二、hbase表數據的檢索流程圖(讀和寫的流程)
1、hbase在Hadoop集群中的物理架構
由圖中可以看出,存儲模塊主要包括了ZooKeeper集群、HMaster、HRegionServer。
ZooKeeper:
Hbase是強依賴於ZooKeeper,我們讀或寫一個表的數據,都會優先訪問ZooKeeper。
通常是集群中單獨的3/5臺服務器。
HMaster通常是Hadoop集群中的一臺或兩臺(backup-Master)。
HRegionServer通常是Hadoop集群中的部分或全部
HRegionServer通常和datanode部署在同一臺服務器上
比如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
【1】想了解大數據知識,可以關注我下方評論轉發後,私信“資料”。
【2】部分資料有時間限制,抓緊時間吧!
感謝大家支持!
閱讀更多 大數據時代吧 的文章