赞
踩
今天,在启动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协议
- <property>
- <name>hbase.rootdir</name>
- <value>hdfs://master:9000/hbase</value>
- </property>
关于这个解决方法,网上的解释其实我没看懂,因为我们默认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代替它。重新启动集群,执行命令,再去查看新生成的日志,就能很快定位问题的位置。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。