我使用命令行,我想知道从哪个主机获取文件(或获取哪个副本)。
通常它应该是离我最近的。但我改变了项目的政策。因此,我想检查最终结果,看看我的新策略是否正常工作。
以下命令未提供任何信息:
hadoop dfs -get /文件
下一个只给了我副本的位置,而不是哪个更适合获取:
hadoop fsck /file -files -blocks -locations
HDFS 将这些信息抽象出来,因为它对于用户知道他们从哪里读取不是很有用(文件系统被设计为尽可能少地使用您的方式)。通常,DFSClient 打算按照返回给它的主机的顺序来获取数据(在发生故障时转移到替代方案)。返回给它的主机由 NameNode 排序以获得适当的数据或机架位置 - 这就是默认方案的工作方式。
虽然您的问题的正确答案是编写可以模拟和断言的良好测试用例,但您也可以在 Hadoop 记录器设置为 DEBUG 的情况下运行您的程序,以检查与各种主机(包括 DN)建立的 IPC 连接何时阅读文件 - 并通过这些手动断言您的主机选择正在按预期工作。
另一种方法是通过调试器运行您的客户端并观察最终建立的连接周围的部分以检索数据(即在 NN RPC 之后)。
谢谢,
最后,我们使用网络统计数据和一个简单的测试用例来查找 hadoop 将副本带到哪里。
但最简单的方法是打印此方法修改的数组节点:
org.apache.hadoop.net.NetworkTopology pseudoSortByDistance(Node reader, Node[] nodes)
正如我们所料,副本的获取是基于方法的结果。第一个项目是首选。除非节点出现错误,否则通常会采用第一项。有关此方法的详细信息,请参阅复制