Hadoop DataNode 给出了不兼容的命名空间 ID

Hadoop DataNode 给出了不兼容的命名空间 ID

当我从主节点运行 start-all.sh 脚本时,我的某些 DataNode 无法启动;日志文件报告 Java IOException:/tmp/$MY_USER_NAME 中的命名空间 ID 不兼容。

答案1

NameNode 格式化后,会生成一个命名空间 ID,该 ID 实质上标识了分布式文件系统的特定实例。DataNode 首次连接到 NameNode 时,会将该命名空间 ID 与数据块一起存储,因为这些块必须属于特定的文件系统。

如果 DataNode 稍后连接到 NameNode,并且 NameNode 声明的命名空间 ID 与 DataNode 上存储的命名空间 ID 不匹配,它将拒绝操作并显示“不兼容的命名空间 ID”错误。这意味着 DataNode 已连接到不同的 NameNode,并且它存储的块不属于该分布式文件系统。

这通常意味着您不知何故放错了 NameNode 元数据。如果您有多个 HDFS 安装,您的 DataNode 可能连接到错误的 NameNode。如果您只有一个安装,那么您的 NameNode 要么正在使用不同的元数据目录运行,要么您不知何故丢失了元数据并使用新格式化的文件系统启动(这只能通过运行 来实现hadoop namenode -format)。尝试查找正确的 NameNode 元数据或从备份中恢复它。

答案2

每次 NameNode 重新格式化时,它都会生成一个新的命名空间 ID,而您的某些机器没有收到备忘录。解决此问题的最简单方法是重新格式化分布式文件系统;从 HDFS 检索任何可以检索的文件,然后rm -Rf /tmp/hadoop-$MY_USER_NAME在每台服务器上运行(目录路径可能因您的配置而异)。然后hadoop namenode -format从主服务器运行。之后,bin/start-all.sh应该就可以解决问题了。

相关内容