HBase第五天——HBase讀寫過程


HBase第五天——HBase 讀寫過程

自己的話:我願平東海,身沉心不改;
大海無平期,我心無絕時。

HBase的讀寫過程及Master、Region的管理機制


一、讀請求過程

在這裏插入圖片描述
1、Client 先訪問 zookeeper,從 meta 表讀取 region 的位置,然後讀取 meta 表中的數據。meta中又存儲了用戶表的 region 信息;

2、根據 namespace、表名和 rowkey 在 meta 表中找到對應的 region 信息;

3、找到這個 region 對應的 regionserver;

4、查找對應的 region;

5、先從 MemStore 找數據,如果沒有,再到 BlockCache 裏面讀;

6、BlockCache 還沒有,再到 StoreFile 上讀(爲了讀取的效率);

7、如果是從 StoreFile 裏面讀取的數據,不是直接返回給客戶端,而是先寫入BlockCache,再返回給客戶端。
在這裏插入圖片描述


二、寫請求過程:

在這裏插入圖片描述
1、Client 向 HregionServer 發送寫請求;

2、HregionServer 將數據寫到HLog(write ahead log)。爲了數據的持久化和恢復;

3、HregionServer 將數據寫到內存(MemStore);

4、反饋 Client 寫成功。

注意:

(1)如果Memstore達到閾值,會把Memstore中的數據flush到Storefile中。

(2)當Storefile越來越多,會觸發Compact合併操作,把過多的Storefile合併成一個大的Storefile。

(3)當Storefile越來越大,Region也會越來越大,達到閾值後,會觸發Split操作,將Region一分爲二。


三、Region管理

1. region分配

任何時刻,一個region只能分配給一個region server。master記錄了當前有哪些可用的region server。以及當前哪些region分配給了哪些region server,哪些region還沒有分配。當需要分配的新的region,並且有一個region server上有可用空間時,master就給這個region server發送一個裝載請求,把region分配給這個region server。region server得到請求後,就開始對此region提供服務。

2. region server上線

master使用zookeeper來跟蹤region server狀態。當某個region server啓動時,會首先在zookeeper上的server目錄下建立代表自己的znode。由於master訂閱了server目錄上的變更消息,當server目錄下的文件出現新增或刪除操作時,master可以得到來自zookeeper的實時通知。因此一旦region server上線,master能馬上得到消息。

3. region server下線

當region server下線時,它和zookeeper的會話斷開,zookeeper而自動釋放代表這臺server的文件上的獨佔鎖。master就可以確定:
(1)region server和zookeeper之間的網絡斷開了。
(2)region server掛了。

無論哪種情況,region server都無法繼續爲它的region提供服務了,此時master會刪除server目錄下代表這臺region server的znode數據,並將這臺region server的region分配給其它還活着的同志。


四、Master管理

1. master上線

master啓動進行以下步驟:
(1)從zookeeper上獲取唯一一個代表active master的鎖,用來阻止其它master成爲master。
(2)掃描zookeeper上的server父節點,獲得當前可用的region server列表。
(3)和每個region server通信,獲得當前已分配的region和region server的對應關係。
(4)掃描.META.region的集合,計算得到當前還未分配的region,將他們放入待分配region列表。

2. master下線

由於master只維護表和region的元數據,而不參與表數據IO的過程,master下線僅導致所有元數據的修改被凍結(無法創建刪除表,無法修改表的schema,無法進行region的負載均衡,無法處理region 上下線,無法進行region的合併,唯一例外的是region的split可以正常進行,因爲只有region server參與),表的數據讀寫還可以正常進行。因此master下線短時間內對整個hbase集羣沒有影響。

從上線過程可以看到,master保存的信息全是可以冗餘信息(都可以從系統其它地方收集到或者計算出來)

因此,一般hbase集羣中總是有一個master在提供服務,還有一個以上的‘master’在等待時機搶佔它的位置。


Pay atention to your atention

讓優秀成爲習慣


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章