1HBase数据路由
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节点宕机(内存数据也丢失),这样就会导致在元数据中存储的位置没有得到更新。
3HBase检查工具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.2HBCK检查现象
数据丢失后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.2HBCK检查现象
一直在试图扫描.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.2HBCK检查现象
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.2HBCK检查现象
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.2HBCK检查结果
因HBase集群已停止,所以先将HBase启动,再执行HBCK。
6.3修复方案
1、进入HBase安装客户端的bin目录,执行./hbase
hbck -repair
2、HBase集群恢复正常