hadoop namenode启动不了解决方案

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


原因分析:

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

core-site.xml内容如下:

  1. hadoop.tmp.dir
  2. file:/usr/local/hadoop/tmp
  3. Abase for other temporary directories.
  4. fs.defaultFS
  5. hdfs://localhost:9000

hdfs-site.xml内容如下:

  1. dfs.replication
  2. 1
  3. dfs.namenode.name.dir
  4. file:/usr/local/hadoop/tmp/dfs/name
  5. dfs.datanode.data.dir
  6. file:/usr/local/hadoop/tmp/dfs/data
导致系统启动后会默认读取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)