两阶段 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
(还有一些没想明白后面再补充)