1.背景
我司某套HBase阿里云生产环境,主要是为了pinpoint服务。
业务抛错: Can't get the location
当我拿到同事求助的机器IP时,已经时间过去 1 day,登录机器执行:
bin/hbase-daemon.sh start regionserver
命令启动RS,始终起不来,日志没有什么可用信息。
2.杀死此时一直在分割日志(split)的HMaster进程,然后启动HBase
ps -ef|grep hbase
kill -9 pid
尝试启动hbase
bin/start-hbase.sh
发现依然无法启动rs进程,但是在master log发现日志如下:
2019-01-30 11:53:35,791 INFO [AM.ZK.Worker-pool2-t10] master.RegionStates: Onlined 8d8737a9a489d9458e94d224ad4ca035 on hadoop001,16201,1548820383721
2019-01-30 11:53:35,791 INFO [AM.ZK.Worker-pool2-t10] master.RegionStates: Offlined 8d8737a9a489d9458e94d224ad4ca035 from hadoop001,16201,1548819734962
日志频繁的刷新onlined,offlined信息,这时我们应该尝试优雅重启RS。
3.优雅重启rs的hadoop001节点
而不是暴力kill rs进程后再去使用hbase-daemon.sh脚本单独启动rs进程。
应该使用以下命令:
bin/graceful_stop.sh --restart --reload --debug hadoop001
4.查看进程,且建表测试
jps命令发现进程都起来了,hbase shell命令端进去建表hbase_test测试,其实应该可用了,恢复了。
5.但是开发那边依旧抛错
unable to find region for in ApplicationIndex after 35 tries.
6.一点点的经验
6.1先执行hbase hbck命令。检查输出所有ERROR信息,每个ERROR都会说明错误信息。
6.2再执行hbase hbck -fixHdfsHoles命令。修复region缺失,利用缺失的rowkey范围边界,生成新的region目录以及regioninfo填补这个空洞。
6.3再执行hbase hbck -fixAssignments -fixMeta命令。
把这些offline的region触发上线,当region开始重新open 上线的时候,会被重新分配到真实的RegionServer上 , 并更新meta表上对应的行信息。再修复meta表信息,利用regioninfo信息,重新生成对应meta row填写到meta表中,并为其填写默认的分配regionserver。
6.4最后执行hbase hbck命令。发现状态输出:OK
6.5hbase shell命令客户端scan这个key,正常输出结果。
7.开发那边测试校验调整,最后发来感谢
在2019第2天上班,
找时间特此记录一下,
好记性不如烂笔头。
以上就是本人的故障解决思路,
如有不当,欢迎留言交流
本人之前几篇社区文章,
有兴趣的收藏阅读。
聊聊两周两次的非人为HBase的事故
记录一次生产上暴力解决HBase RIT问题
排查生产环境HBase RegionServer节点无法启动问题
大家工作学习遇到HBase技术问题,把问题发布到HBase技术社区论坛http://hbase.group,欢迎大家论坛上面提问留言讨论。想了解更多HBase技术关注HBase技术社区公众号(微信号:hbasegroup),非常欢迎大家积极投稿。
加社区群扫我