hadoop namenode启动不了解决方案

hadoop集群启动namenode时,用jps查看datanode没有启动。


原因分析:

由于在core-site.xml,hdfs-site.xml文件中,我没有设置如下内容。

core-site.xml内容如下:

  1. <configuration>
  2. <property>
  3. <name>hadoop.tmp.dir</name>
  4. <value>file:/usr/local/hadoop/tmp</value>
  5. <description>Abase for other temporary directories.</description>
  6. </property>
  7. <property>
  8. <name>fs.defaultFS</name>
  9. <value>hdfs://localhost:9000</value>
  10. </property>
  11. </configuration>

hdfs-site.xml内容如下:

  1. <configuration>
  2. <property>
  3. <name>dfs.replication</name>
  4. <value>1</value>
  5. </property>
  6. <property>
  7. <name>dfs.namenode.name.dir</name>
  8. <value>file:/usr/local/hadoop/tmp/dfs/name</value>
  9. </property>
  10. <property>
  11. <name>dfs.datanode.data.dir</name>
  12. <value>file:/usr/local/hadoop/tmp/dfs/data</value>
  13. </property>
  14. </configuration>
导致系统启动后会默认读取linux根目录下的tmp/hadoop-hadoop/下的文件。

如果系统没有重启,这个目录不会被系统清理掉,保存了namenode和datanode相关信息。

这样下次启动hadoop时(不论是重新格式化hdfs文件系统,还是其他操作),hadoop还是会读取默认位置,也就是tmp/hadoop-hadoop/下的文件作为namenode、datanode的配置信息。

而,重新格式化之后,namenode会重新生成,但保存在tmp/hadoop-hadoop中的datanode配置信息,不会重新生成。

两个cluster-ID冲突,导致启动datanode失败。


解决办法:

一:(已验证)

在core-site.xml,hdfs-site.xml文件中,显示确定namenode和datanode配置文件的位置。

设置内容见上。

重启hadoop,成功。无论是重新格式化hdfs,还是仅仅启动namenode、datanode,都没问题。

二: (根据原理推测可行解决方案,未验证)

系统开机后,只执行一次format操作。(如果不小心format了,则可以先删除tmp文件夹,rm -r ./tmp然后在执行format等启动hadoop操作)

后续只是打开namenode和datanode操作。

这样就不生成新的namenode cluster ID,不会导致ID号冲突。

你可能感兴趣的:(hadoop)