HBase Master is initializing的错误可能

 今天,在启动kylin时,报Failed to find metadata storeby url: kylin_metadata@hbase,确认这肯定是hbase的错误导致kylin无法正常启动,于是进入hbase shell,输入list命令测试,果然出现hbase.PleaseHoldException: Master is initializing,从字面可以知道,主节点正在初始化,请稍等,初始化我了解,但你不能让我一直等啊,毕竟科研任务还得推进,于是开始百度解决方法。详细错误如下:

ERROR: org.apache.hadoop.hbase.PleaseHoldException: Master is initializing

hbase(main):001:0> list
TABLE                                                                                                                     
ERROR: org.apache.hadoop.hbase.PleaseHoldException: Master is initializing
        at org.apache.hadoop.hbase.master.HMaster.checkInitialized(HMaster.java:2452)
        at org.apache.hadoop.hbase.master.MasterRpcServices.getTableNames(MasterRpcServices.java:915)
        at org.apache.hadoop.hbase.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java:58517)
        at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2339)
        at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:123)
        at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:188)
        at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:168)
Here is some help for this command:
List all tables in hbase. Optional regular expression parameter could
be used to filter the output. Examples:
  hbase> list
  hbase> list 'abc.*'
  hbase> list 'ns:abc.*'
  hbase> list 'ns:.*'

 解决思路:查找master的log日志,最终定位在下图红框中位置:`/hbase/WALs/slave2,16020,1547517841480-splitting is non empty': Directory is not empty

解决方法:删除上述路径  hadoop fs -rm -r /hbase/WALs

真的是找问题占99%,解决问题只占1%啊,好艰难。


下面再总结一下网上解决这个方法的其他几种方案:

1、时间没有同步

这个问题一般只会出现在刚安装Hbase的情况下,如果安装完已经正常使用,突然有一天报错(类似我这样),一般不会是hbase的master 和 regionserver时间不同步造成的。

解决时间同步的方法很简单,首先使用date命令确认集群时间,再运行ntpdate  0.cn.pool.ntp.org命令即可

2、ZooKeeper

因为Hbase是依靠zookeeper来实现集群通信,因为很有必要检查zookeeper的状态以及它的日志。

2、底层采用的不是hdfs协议


    hbase.rootdir
    hdfs://master:9000/hbase

关于这个解决方法,网上的解释其实我没看懂,因为我们默认hbase的底层存储其实是在HDFS上,一般来说配置都会如上述,怎么会出现底层采用的不是hdfs协议的问题呢。

此外,有人说将配置文件改为hbase.root.dir,这样改完确实不出错了,但是你是用list命令,不会查出任何数据表出来,所以解决等于没解决。再反过来思考,如果这个配置出现问题,你的hbase之前就不可能正常使用。

综上述,导致Master is initializing的缘由一般不会是这个问题。

3、格式化NameNode

格式化NameNode,其实我们在安装Hadoop的时候已经完成了,如果再次执行hdfs namenode -format的话,可能会导致hadoop的datanode无法启动,慎用。

4、删除Hdfs上的/hbase目录  && ip映射

这两种方案个人觉得比较扯的,第一、删除/hbase目录,如果这个集群是你自己用还好,如果是公司的集群,存放着数据,删除hbase目录也许意味着你工作的介绍,哈哈,开个玩笑,表达的意思就是,这是存放数据的地方,不要随意删;第二将/etc/hosts下的#127.0.0.1      localhost     127.0.1.1       hadoop修改为127.0.0.1,这个就不发过多评论了,只是觉得这个方法各位看官完全可以忽略。


总结(经验&教训):

出现问题一定要去查看日志,如果之前的日志积累的比较多,并且没有重要日志在里面的话,可以将logs文件夹删除,再创建一个logs代替它。重新启动集群,执行命令,再去查看新生成的日志,就能很快定位问题的位置。

你可能感兴趣的:(大数据-Kylin,大数据-Hbase)