1 HBase数据路由
1、 从ZooKeeper中获取-ROOT- Region所在的RegionServer
2、 向-ROOT- Region所在的RegionServer发送Scan –ROOT-的RPC请求,来获取.META. Region 所在的位置。下图为-ROOT- Region里的具体内容
3、 向.META. Region所在的RegionServer发送Scan .META.的RPC请求,来获取User Region 所在的位置。下图为.META. Region的具体内容
4、 向User Region所在的RegionServer发送Scan .该User Region的RPC请求,来获取需要的数据。
2 元数据异常分类
由第一章的介绍,可以看出-ROOT- .META. Region中数据非常重要,如果-ROOT- .META. Region中的数据异常,将会导致整个集群的全部或者部分的User Region无法路由,集群将无法正常运行。
2.1 元数据全部丢失
元数据底层存储在HDFS上(以HFile形式存储),如果底层的文件块丢失,或者损坏,则会导致元数据全部丢失。
2.2 元数据部分丢失
.META.迁移后,会将其存储在-ROOT-中的位置更新为新的RegionServer的地址,同理User Region迁移后,也会将其存储在.META.中的位置更新为新的RegionServer的地址。但是更新并没有直接修改底层的存储文件,而是先写入HLog (存储在HDFS上,RegionServer宕机后,用来恢复数据),再写入内存,在满足一定条件的时候才会真正的更新到底层的存储文件(HFile),所以一旦HLog这个块异常,且RegionServer节点宕机(内存数据也丢失),这样就会导致在元数据中存储的位置没有得到更新。
3 HBase检查工具HBCK
HBase提供了一个检查工具HBCK,该工具可以检查出HBase常见的问题,并尝试修复部分问题。
执行方法:在安装的HBase客户端的bin目录下执行./hbase hbck。
注意: HBase某些正常流程(Region split, Region assign等),会导致HBCK检查出集群状态为异常。要确定集群异常,最好连续执行HBCK,且每次异常都相同,才能确定集群出现异常。下图为执行HBCK的检查结果为正常的集群。
4 -ROOT-数据丢失恢复
4.1 数据完全丢失修复
4.1.1 构造场景
进入HBase shell客户端执行如下命令删除-ROOT- Region中的所有数据
delete '-ROOT-', '.META.,,1', 'info:regioninfo'
delete '-ROOT-', '.META.,,1', 'info:server'
delete '-ROOT-', '.META.,,1', 'info:serverstartcode'
delete '-ROOT-', '.META.,,1', 'info:v'
4.1.2 HBCK检查现象
数据丢失后HBase集群没有重启时,HBCK检查现象
数据丢失,HBase集群重启后,HBCK检查现象
4.1.3 修复方案
1、 停止HBase集群。
2、 删除-ROOT-在HDFS路径下的所有数据。
执行方法:在HDFS客户端的bin路径下,执行./hdfs dfs –rm –r /hbase/-ROOT-
3、 启动HBase集群。
4、 集群恢复正常
4.2 部分数据丢失导致.META. Region位置错误修复
4.2.1 构造场景
进入HBase shell客户端执行如下命令修改.META. Region所在的RegionServer
put '-ROOT-', '.META.,,1', 'info:server', '160-172-0-13:26003'
注:主机名指定为集群中另外一台节点的主机名
4.2.2 HBCK检查现象
一直在试图扫描.META. Region 但是因为位置错误,导致一直在循环尝试。
4.2.3 修复方案
1、 重启HBase集群
2、 HBase集群恢复正常
5 .META.数据丢失恢复
5.1 数据完全丢失修复
5.1.1 构造场景
进入HBase shell客户端执行如下命令删除-ROOT- Region中的所有数据
delete '.META.', 'Region名', 'info:regioninfo'
delete '.META.', ' Region名', 'info:server'
delete '.META.', ' Region名', 'info:serverstartcode'
5.1.2 HBCK检查现象
5.1.3 修复方案
1、 进入HBase安装客户端的bin目录,执行./hbase hbck -repair
2、 HBase集群恢复正常
5.2 部分数据丢失导致User Region位置错误修复
5.2.1 构造场景
进入HBase shell客户端执行如下命令修改.META. Region所在的RegionServer
put '.META.', 'Region名','info:server','160-172-0-13:26003'
注:主机名指定为集群中另外一台节点的主机名
5.2.2 HBCK检查现象
5.2.3 修复方案
1、 进入HBase安装客户端的bin目录,执行./hbase hbck -repair
2、 HBase集群恢复正常
6 极端场景测试
现在来考虑-ROOT- .META.数据全部丢失的场景,若这种场景能够修复,那么部分元数据丢失的场景也能修复。因为可以强制将元数据表里的记录给全部删除(上述的所有场景均会被这种场景覆盖)。
6.1 构造场景:
1、 停止集群
2、 删除HBase在HDFS中存放的所有元数据。
进入HDFS客户端执行命令:
hdfs dfs -rm -r /hbase/.META.
hdfs dfs -rm -r /hbase/-ROOT-
6.2 HBCK检查结果
因HBase集群已停止,所以先将HBase启动,再执行HBCK。
6.3 修复方案
1、 进入HBase安装客户端的bin目录,执行./hbase hbck -repair
2、 HBase集群恢复正常