错误分析
我之前装了hadoop3.2.0,但是MapReduce使用有问题,就卸载了。重新安装了hadoop2.8.5,装完 之后重新启动发现namenode可以启动成功,但是datanode启动失败。
启动失败就要去查询日志,输入指令cd $HADOOP_HOME/logs
,进入hadoop日志文件目录,可以看到后缀带.log的文件,都是日志文件。
我们是datanode启动失败,就看日志文件名中包含datanode的日志文件,即为hadoop-root-datanode-newler.log
,使用cat或vim等指令查看日志文件。注意log文件按照时间先后顺序记录所有时间段的日志信息,所以需根据记录时间看最近的日志信息,查看最底部就是最新的日志信息,关键错误信息如下所示:
WARN org.apache.hadoop.hdfs.server.common.Storage: Failed to add storage directory [DISK]file:/tmp/hadoop-root/dfs/data/
java.io.IOException: Incompatible clusterIDs in /tmp/hadoop-root/dfs/data: namenode clusterID = CID-78e204dc-04ae-40de-81be-7849270d5914; datanode clusterID = CID-dd673b5f-3483-47eb-8ffa-f9938587ee88
at org.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:760)
at org.apache.hadoop.hdfs.server.datanode.DataStorage.loadStorageDirectory(DataStorage.java:293)
at org.apache.hadoop.hdfs.server.datanode.DataStorage.loadDataStorage(DataStorage.java:409)
at org.apache.hadoop.hdfs.server.datanode.DataStorage.addStorageLocations(DataStorage.java:388)
at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:556)
at org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java:1574)
at org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java:1535)
at org.apache.hadoop.hdfs.server.datanode.BPOfferService.verifyAndSetNamespaceInfo(BPOfferService.java:382)
at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandshake(BPServiceActor.java:266)
主要原因是Failed to add storage directory [DISK]file:/tmp/hadoop-root/dfs/data/
。
产生错误的原因是:如果没有指定临时文件存放路径,则默认路径是/tmp
。之前hadoop3.2.0运行产生的临时文件保存在/tmp
下面,hadoop2.8.5运行产生的临时文件默认也保存在/tmp
下面,存储时就和hadoop3.2.0的临时文件发生了冲突。
发生冲突的临时目录路径以[DISK]
后面的路径为准。我们需要把集群上的每台机器上临时目录中和hadoop相关的临时文件删除。
解决方案
- 配置了环境变量,执行指令
stop-all.sh
,停止所有hadoop服务。
2.使用rm
指令删除集群上的所有机器需要删除临时文件夹下和hadoop相关的所有文件。
3.输入指令hadoop namenode -format
,hdfs文件系统重新格式化。
4.输入指令start-dfs.sh
,重新启动,即可成功。
总结
遇到问题,查看错误日志,分析错误原因,不知道原因,咨询合作伙伴谷歌。