hadoop.tmp.dir 的 VERSION 文件有什么用

What is the use of VERSION file for hadoop.tmp.dir

最近我格式化了 namenode 并且在启动 hadoop 守护进程时 datanode 失败并给出如下错误

2019-01-11 10:39:15,449 WARN org.apache.hadoop.hdfs.server.common.Storage: Failed to add storage directory [DISK]file:/app/hadoop/tmp/dfs/data/ java.io.IOException: Incompatible clusterIDs in /app/hadoop/tmp/dfs/data: namenode clusterID = CID-76c39119-061a-4ecf-9de1-3a6610ca57dd; datanode clusterID = CID-90359d7f-b1a5-431e-8035-bc4b9e2ea8b9

作为解决方案,我删除了 tmp 并重新创建了它的工作文件,还在它开始工作的版本文件中将名称节点 CID 复制到数据节点 CID。

在查看我的备份时,我可以看到数据节点和名称节点的 CID 是不同的,并且在更早的时候工作。

谁能详细说明每个值代表什么以及两个 CID 需要相同还是不同?

  1. 存储 ID=DS-7628c4d7-a508-406c-94fa-9b00f45b4f42
  2. clusterID=CID-73f3a584-4a8a-4260-856c-5a2062b6ae61
  3. cTime=0
  4. datanodeUuid=40834363-2025-4e9a-bb1e-e489bf13cad9
  5. 存储类型=DATA_NODE
  6. layoutVersion=-57

  7. namespaceID=1181871748

  8. clusterID=CID-73f3a584-4a8a-4260-856c-5a2062b6ae61
  9. cTime=1547187830726
  10. 存储类型=NAME_NODE
  11. blockpoolID=BP-2120424576-127.0.1.1-1547187830726
  12. layoutVersion=-63

数据节点和名称节点中的 Cluster-ID 必须相同或者删除 <dfs.datanode.data.dir> / 目录和 <dfs.namenode.name.dir> / 目录并格式化名称节点以使用新副本启动 hdfs 集群集群 ID。您可以参考hadoop tutorial site了解更多详情

主版本文件中存在的值充当数据节点的身份验证。只有有效的数据节点才能加入集群。当 DataNode 加入集群时,它只能通过 VERSION 文件中的值进行身份验证。希望这能消除您的疑问。