如何在 运行 MR 作业中找到存储和读取特定文件的数据节点?
How to find the datanode where a particular file is stored and read from while running an MR Job?
我有 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代码,可以使用下面的class
org.apache.hadoop.hdfs.tools.DFSck
使用这个方法
doWork(final String[] args)
这将在内部创建一个 URI 并使用 System.out 打印所有详细信息。
我有 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代码,可以使用下面的class
org.apache.hadoop.hdfs.tools.DFSck
使用这个方法
doWork(final String[] args)
这将在内部创建一个 URI 并使用 System.out 打印所有详细信息。