步骤
今天搭建Hbase环境,遇到了此bug。一开始搭建hdfs的时候还是很顺利的,参考着别人的博客,一步一的做下去,最后可以正常启动。而在搭建HBase的时候遇到了一个很大的bug。但是造成该bug的原因却没有什么高深的原理。简单来说就是:在第一次格式化dfs后,启动并使用了hadoop,后来又重新执行了格式化命令(hdfs namenode -format),这时namenode的namespaceID会重新生成,导致namenode和datanode的版本不一致。
下面参考中列出了两篇对我有启发性的博客。下面具体来说说我的debug历程:
1、一开始,疯狂google,先是看了几篇文章,大致都是说的zookeeper有问题。我也根据讲的比较清楚的几篇博客做了些尝试。但都没有什么效果。考虑到在配置过程中几乎没有涉及到zookeeper的内容,因此我就放弃了这个方向。
2、追踪Logs文件。发现了如下异常2020-05-09 19:27:57,074 ERROR [main] master.HMasterCommandLine: Master exiting java.lang.RuntimeException: HMaster Aborted
。于是就直接去搜索这个日志,也看了几篇博客,大致上说的还是zookeeper的问题。就没再去做尝试。实际上,这时就已经非常绝望了,但是还是不想放弃。就在偶然的一次stop-dfs,stop-hbase时,发现region-server不能被关掉。这是转折点。这个问题并不大,直接kill掉就可以。
3、就kill掉之后,再次尝试,看看是否还是无法关闭,此时,发现在start-hbase后,打印jps时,data-node没有了。突然想到,NoNode也许就是说的这个。然后继续搜索dataNode消失的问题。这个时候发现,原来我执行了两次namenode -format。导致namenode和datanode不匹配。于是,清除掉了已有的Current。重新format了一下,这时问题得到解决…
参考
Hbase报错解决方法ERROR: KeeperErrorCode = NoNode for /hbase/master
启动Hadoop时,DataNode启动后一会儿自动消失的解决方法