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.
说明无法发现该key的region,是需要修复的
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.5 hbase shell 命令客户端scan这个key,正常输出结果。
7.开发那边测试校验调整,最后发来感谢
在2019第2天上班,
找时间特此记录一下,
好记性不如烂笔头。
以上就是本人的故障解决思路,
如有不当,欢迎留言交流
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30089851/viewspace-2625256/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/30089851/viewspace-2625256/