HBase Region分裂的三種策略

一、ConstantSizeRegionSplitPolicy

一個Region中最大Store的大小超過閾值以後就會觸發分裂。該策略最簡單,但弊端至關大。閾值設置大,對大表友好,小表可能不會觸發分裂,極端狀況下可能只有一個region。閾值設置小,對小表友好,但一個大表可能在集羣中產生大量的region。對於集羣管理不是好事。線程

二、IncreasiongToUpperBoundRegionSplitPolicy

一個Region中最大Store的大小超過閾值以後就會觸發分裂。閾值不是固定的值,而是在必定狀況下不斷調整的,調整後的閾值大小和Region所屬表在當前region server上的region個數有關係。
調整後的閾值 = regions regions flushsize * 2
閾值不會無限增大,maxRegionFileSize來作限制。可以自適應大小表,集羣規模大的狀況下,對大表很優秀,對小表會產生大量小regioncode

三、SteppingSplitPolicy
分裂閾值大小和待分裂Region所屬表在當前Region Server上的region個數有關係。
若是region個數爲1,分裂之爲flushsize * 2。
不然爲 maxRegionFileSize
大表小表都不會產生大量的regionserver

Region分裂準備

一、初始化兩個子Region對象
二、更改zk的狀態爲splitting、更改master內存中父region的狀態信息
三、在父目錄下新建.split文件夾
四、關閉父region,flush操做,數據落盤。短期落在父region上的請求都會拋異常
五、在.split文件夾下生成兩個子文件夾daughterA、daughterB,並在兩個文件夾內生成reference文件,分別指向父region中對應的文件對象

reference是引用文件,文件中的內容並非用戶數據。由兩部分構成,分裂點、boolean變量,true表示reference引用的是父文件的上部分,false表示下半部分

六、分裂成兩個region後,將daughterA、daughterB拷貝到HBase根目錄
七、下線父region,修改meta表,內存

根據reference文件查找數據

一、根據文件名定位到具體文件(父region名+hfile名)
二、根據reference文件內容的兩個變量肯定要掃描的部分數據it

父region數據遷移到子region

Major Compactionio

父region被刪除的時間

master啓動線程按期遍歷檢查全部處於splitting狀態的父region
一、讀取出meta表中全部split爲true的region,加載出他們的子region
二、檢查子region是否還存在引用文件,若不存在,父region對應的文件就能刪除ast

相關文章
相關標籤/搜索