HDFS 查找丢失块的最后已知位置

HDFS Find last known locations of missing blocks

我在 HDFS 上有一些损坏的文件,因为所有块副本都被报告为丢失。现在有很多数据节点,所以我想知道要恢复哪些数据节点,哪些将纠正丢失的块。

我有文件和块的列表,有什么方法可以显示块的“最后已知位置”(它们在哪个数据节点上)?

到目前为止,我已经尝试使用 hadoop fsck,但它似乎只能报告所有副本都丢失了,而不是它们所在的位置。还尝试将 hadoop oiv 与 XML 转储一起使用,但我看不到任何块位置信息。

这些信息在任何地方都可以获得吗?

块的位置不会持久化。如果您重新启动 Namenodes,它们会忘记所有位置,只会从数据节点块报告中了解它们。

因此,如果块丢失,则意味着没有数据节点在其磁盘上找到它们,因此它们不会报告给名称节点。

要检查的一件事是所有 DN 都报告了预期的块数,并且没有报告失败的卷并且每个 DN 都有预期的磁盘数。

如果这些块是最近的,您可能会幸运地为缺少的 block_ids 搜索名称节点日志。在那里你可能会找到它们最初分配的位置,但如果平衡器是 运行 等等,它们可能已经移动了。