Hadoop 如何在运行MR作业时查找存储和读取特定文件的数据节点?

Hadoop 如何在运行MR作业时查找存储和读取特定文件的数据节点?,hadoop,mapreduce,cluster-computing,Hadoop,Mapreduce,Cluster Computing,我有9个文件,每个文件的大小等于集群的BlockLength,存储在hadoop中。 我需要获得文件所在的数据节点的地址。复制因子为3 是否有任何hadoop API来执行此操作或任何其他可能的方法?查找文件的块和数据节点的命令如下所示 hadoop fsck /user/tom/part-00007 -files -blocks -racks 这将显示以下结果 /user/tom/part-00007 25582428 bytes, 1 block(s): OK 0. blk_-37248

我有9个文件,每个文件的大小等于集群的BlockLength,存储在hadoop中。 我需要获得文件所在的数据节点的地址。复制因子为3


是否有任何hadoop API来执行此操作或任何其他可能的方法?

查找文件的块和数据节点的命令如下所示

 hadoop fsck /user/tom/part-00007 -files -blocks -racks
这将显示以下结果

/user/tom/part-00007 25582428 bytes, 1 block(s): OK
0. blk_-3724870485760122836_1035 len=25582428 repl=3 [/default-rack/10.251.43.2:50010,
/default-rack/10.251.27.178:50010, /default-rack/10.251.123.163:50010]

这将指定放置副本的数据节点。

要使用java代码,可以使用以下类

org.apache.hadoop.hdfs.tools.DFSck
使用这种方法

doWork(final String[] args)
这将在内部创建URI,并使用System.out打印所有详细信息