问题描述:orphan regions on filesystem
可以通过主master web页面的HBCK Report查看
也可以通过hbck2工具查看
# 查看指定表
hbase hbck -j $HBASE_HOME/lib/hbase-hbck2-1.3.0-SNAPSHOT.jar addFsRegionsMissingInMeta default:tableName
# 查看命名空间下所有表
hbase hbck -j $HBASE_HOME/lib/hbase-hbck2-1.3.0-SNAPSHOT.jar addFsRegionsMissingInMeta default
问题说明:表目录下存在region未上线问题,也就是说这些region下的数据你是访问不到的,解决方案有两种:
1、使用hbck2修复工具指定region上线
2、使用hbase自带的工具LoadIncrementalHFiles 将region数据加载到表中
解决步骤
1、使用hbck2修复工具指定region上线
使用assigns操作将检查出来未上线的region上线,一次可以上线多个region,用空格隔开,如果返回不是[-1],说明上线成功。
hbase hbck -j $HBASE_HOME/lib/hbase-hbck2-1.3.0-SNAPSHOT.jar assigns e800be33637ef611b3a5fc05f713d8f0
2、使用hbase自带的工具LoadIncrementalHFiles 将region数据加载到表中
第一种方法如果失败,可以尝试这个方法,他会将指定region目录下的所有数据导入到指定的表中。
hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles "/tmp/hbase-loaddata/e800be33637ef611b3a5fc05f713d8f0/" "tableName"
额外说明下,使用第一种方法时,如果需要上线的region是从其他表拷贝过来的数据目录,在region上线后很容易产生region重叠(region overlap)问题,也就是region范围发生了交叉。请参考该文章