hbase修复表不能读写的问题

博客描述了一次HBase集群在读取数据时遇到的OutofMemory问题,经过一系列排查,最终确定为HBase表的不一致性导致。通过使用hbasehbck工具的多个修复命令,如修复tableinfo、regioninfo、region重叠和缺失等问题,成功解决了问题。修复过程包括禁用表、执行修复命令和重新启用表。
摘要由CSDN通过智能技术生成

1、问题描述:

hbase集群搭建后,曾经读取hbase数据接口一直很稳定,突然有一天读取hbase数据的接口服务,12-18小时就出现outoffmemory,导致tomcat宕机,用dump memory 查看堆栈发现在读取某个表时异常,最初以为是内存问题,尝试修改tomcat jvm,依然不解决问题,查看了各种原因以及百度,解决方案各种各样,但是都没有解决我的问题,最后怀疑是hbase表的问题,尝试使用hbase hbck修复,最终问题得以解决

2、修复步骤

步骤1. hbase hbck 检查输出所以ERROR信息,每个ERROR都会说明错误信息。

6 inconsistencies detected

步骤2. hbase hbck -fixTableOrphones 先修复tableinfo缺失问题,根据内存cache或者hdfs table 目录结构,重新生成tableinfo文件。

步骤3. hbase hbck -fixHdfsOrphones 修复regioninfo缺失问题,根据region目录下的hfile重新生成regioninfo文件

步骤4. hbase hbck -fixHdfsOverlaps 修复region重叠问题,merge重叠的region为一个region目录,并从新生成一个regioninfo

步骤5. hbase hbck -fixHdfsHoles 修复region缺失,利用缺失的rowkey范围边界,生成新的region目录以及regioninfo填补这个空洞。

步骤6. hbase hbck -fixMeta 修复meta表信息,利用regioninfo信息,重新生成对应meta row填写到meta表中,并为其填写默认的分配regionserver

步骤7. hbase hbck -fixAssignment 把这些offline的region触发上线,当region开始重新open 上线的时候,会被重新分配到真实的RegionServer上 , 并更新meta表上对应的行信息。

注意:一般fix命令执行的时间与你的集群存储大小和region个数相关,请耐心等待。不要kill掉正在执行的fix命令,以免引发其他问题。

修复某个表需要在 hbase shell 客户端先 disable 表名

修复后 enable 表名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰帆<

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值