是否有一个编程接口来找出给定的blockID是否存在于哪个数据节点上。即读取 fsImage 并返回此信息的能力。
问问题
1916 次
2 回答
0
我知道的粗略方法之一是在 dfs 数据目录中查找带有 blockName 的文件。然而,这是一个 O(n) 解决方案,我很确定会有一个 O(1) 解决方案。
于 2012-06-09T05:57:18.167 回答
0
与如何在 HDFS hadoop 中从 blockName 中查找文件类似,namenode 没有公共接口,这将允许您从块 Id 中查找信息(仅通过文件名)。
您可以查看打开 fsImage 但这只会为您提供从块 ID 到文件名的映射,因为承载块的实际位置(DataNodes)未存储在此文件中 - 数据节点树遍历其数据目录并向 NameNode 报告他们有什么积木。
我想如果您可以将调试器附加到名称节点,您可能可以检查块映射,但由于没有从 ID 到文件名的映射,它仍然是一个 O(n) 操作
于 2012-06-09T13:20:03.383 回答