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