HBase Region分裂过程

两阶段 prepare和execute两阶段对应方法

准备

prepare()

获取两个HRegionInfo 分别保存原来Region的前后两部分的信息 主要是 rowkey的start和end

execute

主要两个方法如下:

createDaughters和stepsAfterPONR

createDaughters主要一下方法stepsBeforePONR和写元数据offlineParentInMetaAndputMetaEntries

用ZK临时节点通知,或者RCP通知master

创建./split临时目录

关闭原来的Region,返回列族名和对应的HStoreFile

从上线的Region中删除原来的Region

主要是通过通过创建与该region下storefile个数相同的线程池子进行并行分裂,见StoreFileSplitter的splitStoreFile方法

生成两个Reference文件的路径

先判断splitpoint是不是在这个HStoreFile的范围内 不在返回null

生成两个Reference文件

返回上一层调用

生成两个Integer 分别为分裂的HStoreFile个数

先判断Reference文件数是否和获取的count是否相同

然后创建一个Region,并把临时文件移动到table目录

修改元数据

设置原来的HRegion为下线,已分裂

然后给更新系统的meta元数据表

最后是stepsAfterPONR方法

其中completeSplitTransaction是zk节点的变化

起两个打开的线程

主要是通知Master


总结

流程:准备(生成两个HregionFile)

执行:通过ZK上报分裂事件,

创建./split目录

关闭原来的Region 获取列族名与对应的HStoreFile

找内存中删除原Region

创建HStoreFile个数相同的线程分类HStoreFile

每个生成两个Reference

创建Region

把Reference移动到table目录

修改元数据

设置原Region已下线已分裂

更新meta表

开启新的Region

(还有一些没想明白后面再补充)

你可能感兴趣的:(HBase Region分裂过程)