执行hadoop namenode -format后上传jar到HDFS报错0个datanode运行如何解决
HDFS上传文件无可用DataNode问题解决方案
问题根因
报错核心是当前HDFS集群没有运行的DataNode节点,无法为写入的文件分配存储块。你提到之前操作过hadoop namenode -format,该操作会重新生成NameNode的集群ID(ClusterID),和DataNode本地存储的旧集群ID不匹配,最终导致DataNode启动失败、无法注册到NameNode,是该问题最常见的诱因。
修复步骤
- 首先执行
jps命令验证运行进程,确认输出中没有DataNode进程。 - 停止当前HDFS服务:
stop-dfs.sh
- 打开NameNode的VERSION配置文件,默认路径为
${HADOOP_HOME}/dfs/name/current/VERSION,复制文件内clusterID字段的取值。 - 打开DataNode的VERSION配置文件,默认路径为
${HADOOP_HOME}/dfs/data/current/VERSION,将文件内clusterID字段的取值修改为和NameNode的一致后保存。 - 如果你使用的是测试环境、不需要保留HDFS原有数据,可以直接删除DataNode存储目录下的所有内容,默认路径为
${HADOOP_HOME}/dfs/data/*,跳过手动修改ClusterID的步骤,下次启动DataNode会自动同步NameNode的ClusterID,该方法不要在生产环境使用。 - 重新启动HDFS服务:
start-dfs.sh
- 再次执行
jps确认DataNode进程已存在,或者执行hdfs dfsadmin -report查看在线DataNode数量,确认有节点可用后,重新执行上传命令即可:
hdfs dfs -put AverageWordCount.jar /user/cloudera
注意事项
hadoop namenode -format仅用于首次搭建HDFS集群时的初始化操作,集群已经写入过数据后不要随意执行该命令,否则会触发DataNode集群ID不匹配问题,甚至导致数据丢失。
内容的提问来源于stack exchange,提问作者Justy
相关产品推荐
相关产品推荐

