hbase异常修复经验总结

前言:本文记录了一些我处理生产hbase各种异常情况的经验,以下列举各种问题,以及问题对应的解决办法,在生产环境有参考价值

注意:

1.本文hbase为2.0.2版本,其他版本的修复工过程可能不同

解锁Procedures有哪些方法?

一般Procedures程序会在master节点重启时再运行一遍,解决Procedures程序的报错,是解锁Procedures最好的办法,降低避免数据不一致的风险

高版本的hbase可优先使用hbck2进行解锁​ ,百度可以搜索出来,支持2.0.3和2.1.1

版本hbase可以通过多次重启master的方式触发Procedures归档的程序

低版本hbase可以通过删除hdfs中Procedures文件来解锁

重启集群时,如果报错hbase:meta表不在服务器上,导致集群无法启动如何解决?(如下图)

查看日志:报错异常栈中存在migratezookeeper这个程序,提示meta region is in state opening。并且该报错会可能重复出现,一直再刷,还可能会伴随[org.apache.hadoop.hbase.client.RpcRetryingCaller] Call exception 之类的报错

解决办法:可以使用尝试删除zk中节点meta-region-server和table下的所有节点,然后重启master,该报错即可解决。被删除的zk节点会被master程序重建

重启集群时,报错namespace不在服务器上,导致集群无法启动如何解决(如下图)?

可能会有报错namespace is not online on {服务器名称}

可能会有报错[org.apache.hadoop.hbase.client.RpcRetryingCaller] Call exception

master启动的时候需要读取hbase:namespace表,请求不到其他regionserver的话就无法启动

修改元数据表,使得namespace表状态为离线,如下命令

put 'hbase:meta' ,'hbase:namespace,,1577418002600.769b4d77f8d07c20063310195c8ea505.' ,'info:state','OFFLINE'

(注意这个命令里的加粗部分value是需要你修改的,先get命令看看)

重启master节点即可解决

报错业务表region不在服务器上的解决办法(如下图)?

报错 {region} is not online on {服务器名称}

可能会有报错[org.apache.hadoop.hbase.client.RpcRetryingCaller] Call exception

  1. 检查hbase:meta表,该region中sn和server的列族数据是否是同一个服务器,不是的话需要修改为相同服务器,然后重启master

  2. 如果该region在Procedures程序上锁了,先解锁

  3. 方法一:如果region数量比较少,先使用命令unassign,再assign

  4. 方法二:如果region数量比较多,使用命令disable再enable

  5. 方法三:修改元数据表,将region改为offline(该方法可能需要重启整个集群)

hbase表处于"正在打开"或"正在关闭"的中间状态,无法进行操作的解决思路(如下图)?

  1. 无论是正在打开或者正在关闭,都需要修改元数据使得表状态为已开启,使用语句

put "hbase:meta","表名称","table:state",value="\x08\x00"

  1. 重启master加载元数据表

  2. 使用disable对表进行操作

  3. 使用enable对表进行操作

  4. 修复成功

如何判断一张表的所有region已修复成功,可正常使用?

  1. 数据量比较少,可使用scan命令

  2. 数据量比较大,全表扫描的命令hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'tableName'

  3. 使用hbaseRegion扫描工具

使用修复工具修复元数据表后,如何判断是否有regin不在线?

  1. 手动执行自动均衡命令,如果报数组越界的错误,说明有regin不在线

  2. 查看日志,发现自动均衡程序报错数组越界,说明有regin不在线

  3. 程序全局扫描

自动均衡报数组越界的错误,导致自动均衡功能失效如何解决(如下图)?

arrayIndexOutofBoundSexcExecptiom

  1. 检测集群的所有表的所有region是否已正常部署再服务器上

  2. 对没有被正常部署的region进行重新部署

  3. 如果检查时暂时无法发现那个region不在服务器上,那就一个个表进行disable操作,直到可以执行自动均衡命令为止

报错文件找不到,导致region无法加载,无法读写该region,如何解决?

解释:hadoop里全局搜索找不到的文件的名称,会发现很多形如xxx.xxx的引用文件,只有十几个字节的大小,一般这种情况出现在硬盘资源不够的情况下,启动宕机的hbase集群时容易出现

  1. 可能是引用文件找不到源文件造成的

  2. 删除报错region下的所有无用的引用文件(有争议的操作,可能造成部分数据丢失)

  3. 重启master节点

hbase的RIT问题的一般解决思路:

  1. 处理Procedures程序报错的问题

  2. 将元数据表中相关的信息进行修改,可以用修复工具或者手动修改,一般先把状态改为closed

  3. 重启master

  4. 先unassign然后assign或者进行disable\enable操作,使得region正常上线

附带暴力解决办法记录一次测试环境粗暴修复hbase的RIT和master无法启动问题_apply_bomb的博客-CSDN博客背景:一次对测试环境hbase的远程调试中,一边压测一边调试,最后导致regionserver挂了,出现了几千个处于中间状态的region(RIT),然后master也挂了起不来。按之前的经验,如果大部分region都RIT了,master又挂了,修复起来会比较麻烦。这个集群就我一个人用,目前我只需要一个表正常就行了。于是打算直接重做测试环境hbase集群注意:该方法适用于2.0.2版本的hbase,其他版本hbase操作可能有些不同行动步骤:1. 关闭集群2.将zookeeper根目录下/hbase这个文https://blog.csdn.net/apply_bomb/article/details/125356245?spm=1001.2014.3001.5502

启动hbase的master节点提示切分wal日志失败,由于切分wal失败了,master节点无法启动。且regionserver不停的刷新regionserver没有datanode的节点执行操作的日志:

解决办法是采用小米hbase团队的切割wal日志的办法,在hbase的master节点的配置文件加上一下配置,然后重启master

<property>

<name>hbase.split.writer.creation.bounded</name>

<value>true</value>  

</property>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值