一.Orphan 原理
1.1 什么是Orphan
Orprphaned regions are regions without a .regioninfo file regions are regions without a .regioninfo file
Orphan 是指region对应的Regioninfo文件在hdfs文件丢缺失。
1.2 修复原理
- 检查region的hfile是否存在,可能不存在(数据在内存)。
- 如果没有数据,那么将region迁移到.hbck的一个目录,删除原region目录。
- 根据所有hfile文件确定startkey和endkey。
- 根据startkey和endkey 表的信息 新建在hdfs上新建region目录 regioninfo文件和列族等信息,迁移hfile和wal相关信息到新目录。
- 删除原先缺失regioninfo文件的hdfs的region目录。
二. Orphan 源码分析
2.1 check Orphan
检查 orphan的情况,根据orphanhdfsdir的大小判断是否有overlap的region。
orphanHdfsDirs集合在哪里赋值?
2.2 fix Orphan Condition
修复 Orphan前提
要想修复缺失regioninfo,必须满足以下两个条件
- region对应目录必须存在
- Region对应的Hdfs的表的目录和tebaldesc必须存在
2.3 fix Orphan
修复regioninfo的源码如下:
2.3.1 计算startkey和endkey
根据region目录的所有hifle的最大值和最小值,计算startkey和endkey
- 加载列族目录
- 打开hfile文件流
- 计算某一个hfile的startkey和endkey
- 计算一个列族下startkey和endkey的最大值和最小值
2.3.2 迁移空hfile目录
如果某个region的所有列族的hfile文件为空,则把该目录迁移到.hbck目录下,删除原先的region目录,该情况sidelineRegionDir处理。
2.3.3 新建和迁移region信息
如果存在hfile,新建region和迁移旧region的hfile和wal等信息到hdfs
- 根据startkey和endkey等信息新建region对象,并在hdfs新建对应目录。
- 把原先hbckinfo对应region的信息(hfile和wal等信息)迁移到新建的hdfs目录。
到此源码分析结束,关于orpah的修复风险和修复步骤详见Orphan2