排查生产环境HBase RegionServer节点无法启动问题

               

一.准备环境

CDH-5.12 (HBase1.2)

Phoenix 4.10

Spark 2.1.1


二.实时数据同步架构(DSHS JOB)

MySQL-->Maxwell-->Kafka-->Spark Streaming+Phoenix-->HBase


三.异常现象

RegionServer节点挂了,发送微信警告信息,登录Cloudera Manager查看发现有6个节点挂了。那么第一步应该就是尝试重启这6个RegionServer节点,发现只恢复5个节点;但是还有1个RegionServer节点(hadoop50机器)无法启动,这时查看RegionServer日志:

图片


tail -200f /var/log/hbase/xxxxx.log


图片

异常就是,60020端口被占用,无法启动RS进程。


四.排查分析

a. 查看端口是否被进程占用, 是假死进程

netstat -nlp|grep 60020

执行此命令发现没有进程!那就等待一会再执行看看,依然是没有进程。假如有进程直接kill -9 pid即可。


b.群里咨询HBase小伙伴们,大家各抒己见

有人说是时间不同步,之前遇见过50010端口这种问题;

.........

c.使用lsof -i:60020命令查看

图片

发现进程:

  1. 都是yarn用户的进程;

  2. hadoop50的端口号对接其他机器的60020端口,郁闷一阵子;

  3. 但是ps -ef|grep hbase确实没有RegionServer进程在Running。


五.解决方案

  1. 通过分析发现是yarn用户进程,那么ps查看发现是Container容器的Job;

  2. 这时应该知道是实时同步的DSHS JOB(Spark Streaming通过Phoenix向HBase写数据)引起的,导致hadoop50机器的RegionServer无法启动,报60020端口占用错误;

  3. 手动kill job,由于是Spark Streaming Job是设定参数

    spark.streaming.stopGracefullyOnShutdown 能够优雅关闭Job;加上offset是自我维护,所以能够保障断批还原,数据0丢失;

  4. 启动hadoop50机器的RegionServer服务,发现立即启动成功;

  5. 启动DSHS JOB恢复实时同步Job。


备注: 至于为什么RegionServer挂了,这里就不多叙述,其实就是Compaction问题。

以上是本人解决问题的思路,如有不当欢迎留言交流。

图片

猜你喜欢

转载自blog.51cto.com/15060465/2677232