ILikeFood Asked: 2012-06-29 10:07:51 +0800 CST2012-06-29 10:07:51 +0800 CST 2012-06-29 10:07:51 +0800 CST Hadoop DataNode 给我一个不兼容的命名空间 ID 772 当我从我的主节点运行 start-all.sh 脚本时,我的一些 DataNodes 无法启动;日志文件报告 Java IOException:/tmp/$MY_USER_NAME 中不兼容的命名空间 ID。 hadoop hdfs 2 个回答 Voted Best Answer mgorven 2012-06-29T11:02:55+08:002012-06-29T11:02:55+08:00 当 NameNode 被格式化时,会生成一个命名空间 ID,它本质上标识了分布式文件系统的特定实例。当 DataNode 首次连接到 NameNode 时,它们将命名空间 ID 与数据块一起存储,因为这些块必须属于特定的文件系统。 如果一个DataNode后来连接到一个NameNode,NameNode声明的命名空间ID与DataNode上存储的命名空间ID不匹配,将拒绝操作并报“incompatible namespace ID”错误。这意味着 DataNode 已连接到不同的 NameNode,并且它存储的块不属于该分布式文件系统。 这通常意味着您以某种方式放错了 NameNode 元数据。如果您有多个 HDFS 安装,您的 DataNode 可能会连接到错误的 NameNode。如果您只有一个安装,那么您的 NameNode 要么使用不同的元数据目录运行,要么您以某种方式丢失了元数据并从新格式化的文件系统开始(这应该只能通过运行来实现hadoop namenode -format)。尝试找到正确的 NameNode 元数据或从备份中恢复它。 ILikeFood 2012-06-29T10:07:51+08:002012-06-29T10:07:51+08:00 每次 NameNode 重新格式化时,它都会生成一个新的命名空间 ID,而您的一些机器没有收到备忘录。解决这个问题最简单的方法是重新格式化分布式文件系统;从 HDFS 检索任何文件,然后rm -Rf /tmp/hadoop-$MY_USER_NAME在每台服务器上运行(目录路径可能不同,具体取决于您的配置)。然后hadoop namenode -format从您的主服务器运行。在那之后,bin/start-all.sh应该做的伎俩。
当 NameNode 被格式化时,会生成一个命名空间 ID,它本质上标识了分布式文件系统的特定实例。当 DataNode 首次连接到 NameNode 时,它们将命名空间 ID 与数据块一起存储,因为这些块必须属于特定的文件系统。
如果一个DataNode后来连接到一个NameNode,NameNode声明的命名空间ID与DataNode上存储的命名空间ID不匹配,将拒绝操作并报“incompatible namespace ID”错误。这意味着 DataNode 已连接到不同的 NameNode,并且它存储的块不属于该分布式文件系统。
这通常意味着您以某种方式放错了 NameNode 元数据。如果您有多个 HDFS 安装,您的 DataNode 可能会连接到错误的 NameNode。如果您只有一个安装,那么您的 NameNode 要么使用不同的元数据目录运行,要么您以某种方式丢失了元数据并从新格式化的文件系统开始(这应该只能通过运行来实现
hadoop namenode -format
)。尝试找到正确的 NameNode 元数据或从备份中恢复它。每次 NameNode 重新格式化时,它都会生成一个新的命名空间 ID,而您的一些机器没有收到备忘录。解决这个问题最简单的方法是重新格式化分布式文件系统;从 HDFS 检索任何文件,然后
rm -Rf /tmp/hadoop-$MY_USER_NAME
在每台服务器上运行(目录路径可能不同,具体取决于您的配置)。然后hadoop namenode -format
从您的主服务器运行。在那之后,bin/start-all.sh
应该做的伎俩。