如何在Hadoop中找到blockName到DataNode的映射

如何在Hadoop中找到blockName到DataNode的映射,hadoop,hdfs,Hadoop,Hdfs,是否有一个编程接口来确定给定的blockID是否存在于哪个数据节点上。 也就是说,能够读取fsImage并返回此信息。我知道的一种粗略方法是在dfs数据目录中查找具有blockName的文件。 但是,这是一个O(n)解决方案,我非常确定会有一个O(1)解决方案。类似于,没有指向namenode的公共接口,它允许您从块Id(仅按文件名)查找信息 您可以查看打开fsImage,但这只会提供从块ID到文件名的映射,因为承载块的实际位置(数据节点)未存储在此文件中-数据节点树遍历其数据目录,并向Name

是否有一个编程接口来确定给定的blockID是否存在于哪个数据节点上。
也就是说,能够读取fsImage并返回此信息。

我知道的一种粗略方法是在dfs数据目录中查找具有blockName的文件。 但是,这是一个O(n)解决方案,我非常确定会有一个O(1)解决方案。

类似于,没有指向namenode的公共接口,它允许您从块Id(仅按文件名)查找信息

您可以查看打开fsImage,但这只会提供从块ID到文件名的映射,因为承载块的实际位置(数据节点)未存储在此文件中-数据节点树遍历其数据目录,并向NameNode报告它们拥有的块


我想,如果您可以将调试器附加到名称节点,您可能可以检查块映射,但由于没有从ID到文件名的映射,因此仍然将是一个O(n)操作

如果您想在问题发布后添加更多信息,则应使用编辑标记更新问题。所以请记住,这应该是个问题,而不是答案。