1. 程式人生 > >Hbase資料儲存圖解與資料檢索流程

Hbase資料儲存圖解與資料檢索流程

Hbase資料儲存圖解與流程

一、Hbase資料儲存圖解

 

二、hbase表資料的檢索流程圖(讀和寫的流程)

1、hbase在Hadoop叢集中的物理架構

由圖中可以看出,儲存模組主要包括了ZooKeeper叢集、HMasterHRegionServer

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