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



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

我有文件和块的列表,是否有一种方法可以显示"最后已知位置";块(它们在哪个datanode上)?

到目前为止,我已经尝试使用hadoop fsck,但似乎它可以只是报告,所有的副本都不见了,而不是他们在哪里。还试图使用hadoop oiv与XML转储,但我看不到任何块位置信息。

这个信息在任何地方都能找到吗?

不保留块的位置。如果您重新启动namenode,它们会忘记所有的位置,并且只能从datanode块报告中了解它们。

因此,如果块丢失,这意味着没有datanode在它们的磁盘上找到它们,因此它们没有报告给Namenode。

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

如果块是最近的,您可能会在namenode日志中找到丢失的块id。在那里,您可以找到它们最初分配的位置,但是如果运行平衡器等,它们可能已经移动了。