datanode启动异常(Incompatible clusterIDs)
问题:
正常start-all.sh无法启动datanode进程,但是./hadoop-daemon.sh start datanode又可以启动。过一会后datanode进程又莫名消失。
原理:
多次hdfs namenode -format导致namenode生成了新的clusterid, 和datanode的不一致。
解决:
查日志,发现异常信息如下:
2019-07-22 17:46:09,856 warn org.apache.hadoop.hdfs.server.common.storage: failed to add storage directory [disk]file:/home/wjy/hadoop/tmp/dfs/data
java.io.ioexception: incompatible clusterids in /home/wjy/hadoop-3.1.1/tmp/dfs/data: namenode clusterid = cid-8041cf56-7cbd-423e-a0b6-f782c1e1340f; datanode clusterid = cid-0d8412e3-e59b-4b1b-acdf-871b8cfa2f79
照着网上说的删除本地dfs.data.dir下的所有内容然后重启进程并没有解决我的问题。这个dfs.data.dir是在hdfs-site.xml里找的(由于我用的hadoop3.1.1,所以是dfs.datanode.data.dir):
把data下面的current文件夹删了以后再次格式化namenode,还是那个问题,不同的是namenode的clusterid发生了改变(这很正常,因为重新格式化以后又生成了新的clusterid),datanode的clusterid却一直没变。按理说datanode的clusterid应该是在data/current/version里面被记录的,但是现在我根本就把这个文件夹给删掉了。。。 而且启动datanode时应该会生成一个和namenode一样的clusterid的,并没有。把namenode的version给复制过去做适当的修改还是没用。
后来我发现在下图这个路径下面还有一个data文件夹,下面的version文件中的clusterid正是错误信息中的那个!
原来我之前删错了。。。 把这个current给删掉再重启一次datanode果然就好了(完全分布式记得要删除所有节点的哦,不然slave的datanode也会起不来的)。
可是很奇怪,为什么这个文件不生成在设置的dfs.datanode.name.dir的文件夹下面呢?而是在这个默认路径里面。
上一篇: CSS的基本语法
下一篇: 我喜欢 Google Flutter