hadoop集群启动namenode时,用jps查看datanode没有启动。
原因分析:
由于在core-site.xml,hdfs-site.xml文件中,我没有设置如下内容。
core-site.xml内容如下:
- <configuration>
- <property>
- <name>hadoop.tmp.dir</name>
- <value>file:/usr/local/hadoop/tmp</value>
- <description>Abase for other temporary directories.</description>
- </property>
- <property>
- <name>fs.defaultFS</name>
- <value>hdfs://localhost:9000</value>
- </property>
- </configuration>
hdfs-site.xml内容如下:
- <configuration>
- <property>
- <name>dfs.replication</name>
- <value>1</value>
- </property>
- <property>
- <name>dfs.namenode.name.dir</name>
- <value>file:/usr/local/hadoop/tmp/dfs/name</value>
- </property>
- <property>
- <name>dfs.datanode.data.dir</name>
- <value>file:/usr/local/hadoop/tmp/dfs/data</value>
- </property>
- </configuration>
如果系统没有重启,这个目录不会被系统清理掉,保存了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号冲突。