上面在
rs啟動部分已經提到過
,rs在
zk中的位址註冊為
session
過期自動清理的路徑
(ephemeral)。
在master
中通過regionservertracker對rs
進行監控, 當
rs在zk的
session
過期時間內沒有向
zk傳送心跳。表示
rs已經下線
,會觸發
regionservertracker.nodedeleted
public
void
nodedeleted(string
path)
從regionservertracker.onlineservers
列表中移出此
server
remove(sn
); 通過servermanager.expireserver
對server
執行下線操作。
首先從servermanager.onlienservers
列表中移出此
server
,同時把
server
新增到deadservers
列表中。
檢查是否是
clustershutdown
,如果是,不做
rs的下線處理,否則執行下面流程。 檢查
server
中是否包含
metaregion,
如果包含
metaregion,
通過metaservershutdownhandler
處理下線操作
否則通過
servershutdownhandler
處理下線操作。
this.
servermanager
.expireserver(sn
); }
} servershutdownhandleruser region
的重新分配流程: 1.
通過hbase.master.distributed.log.replay
配置是否分布式日誌重播
,預設為
false 2.
通過hbase.master.log.replay.wait.region.timeout
配置logreplay
的等待超時時間
,預設為
15000ms 3.
檢查是否包含
metaregion,
此處不分析此部分**。 4.
得到metaregion
的路徑,並通過
metareader
從meta
中得到下線的
rs的所有
regions
列表。
5.執行日誌的
split
處理,不分析。
if(
this.
shouldsplithlog
)elseam
.getregionstates
().logsplit
(servername);
6.通過
assignmentmanager.assign(list)
重新分配所有的
region.
Hbase region查詢過程
hbase的table是該region切分的,client操作乙個row的時候,如何知道這個row對應的region是在哪台region server上呢?這裡有個region location過程。主要涉及到2張系統表,root meta.其結構見圖 在zookeeper的 hbase root ...
HBase Region 拆分與合併
region 自動拆分 hbase region 的自動拆分有 6 種觸發策略,如下 regionsplitpolicy 自動拆分策略的使用hbase.regionserver.region.split.policy org.apache.hadoop.hbase.regionserver.incr...
Hbase region空洞修復工具
眾所周知,hbase 中隨著某個table 數量的增多必然會 成多個region,這些region 中的start key 和 end key 首位相連組成乙個閉環.如下圖所示 在表健康的時候可以用hbck工具來掃瞄整個表.結果當然是健康的狀態 hbase hbck details summary ...