hbase split function (2)
hbase 0.94在進行表格分割(split)時,
依序進行下列動作:
1. RegionServer在本地決定進行spliting, 並開始split的過程(SPLIT TRANSACTION).
一開始RegionSever將要分割的表格上鎖(read lock)以防止資料寫入,
創造znode向zookeeper登入, 並將狀態設為"SPLITTING"
2. Master發現zookeeper狀態改變,
並為原本的Region(parent region)設定一個看守者(watcher)
3. RegionServer在HDFS中的parent region目錄下, 開啟一個子目錄(.split),
4. RegionServer把原本的Region(parent region)關閉, 此時, Region是OFFLINE的狀態,
因此, 所有寫入的資料將會失敗(NotServingRegionException), 之後再重試
而關閉的Region將會進行flush.
5. RegionServer在.split資料夾中開啟兩個資料夾(daughterA和daughterB),
由於, 之後會有兩個Region (Store File)指向parent region目錄,
因此, 兩個新產生的Region資料結構中的reference file都要指向parent region的檔案.
6. RegionServer在HDFS中創立真正的目錄(daughterA和daughterB),
並把剛剛建立的reference file一道新建立的目錄下.
7. RegionServer更改.META.的設定 (停止parent region並加入daughterA和daughterB的資訊),
在此時, 使用者將不會看到daughterA和daughterB的資訊, 只會知道parent region正在splitting.
如果此時發發生錯誤, RegionServer將會退回至原本parent region的狀態
8. RegionServer開啟daughterA和daughterB兩個Regions
9. RegionServer將daughterA和daughterB加入.META.表中,
此時, 兩個新產生的Region才算是上線(ONLINE), 此時使用者可以連上新的Region操作,
並藉由查詢.META.表, 更新本地的對應關係
10. RegionServer更新zookeeper中的狀態至SPLIT, Master將藉由zookeeper知道,
此時, split的過程(SPLIT TRANSACTION)才算完成,
Load balancer可能會根據Region的數量搬移新產生的Regions.
11. 在完成Region的切割後, .META.和HDFS中仍保有parent region的資訊,
直到下一次daughterA和daughterB複寫資訊至檔案中,
Master上的Garbage collection程序會持續監控daughter regions,
如果daughter regions不再連結到parent region, 則parent region會被移除.
參考資料:
留言
張貼留言