0
我有9個文件,每個文件的大小等於羣集的BlockLength,存儲在hadoop中。 我需要獲取存在文件的datanode的地址。複製因子是3。如何在運行MR作業時查找存儲特定文件並讀取數據的datanode?
是否有任何hadoop API來做到這一點或任何其他可能的方式?
我有9個文件,每個文件的大小等於羣集的BlockLength,存儲在hadoop中。 我需要獲取存在文件的datanode的地址。複製因子是3。如何在運行MR作業時查找存儲特定文件並讀取數據的datanode?
是否有任何hadoop API來做到這一點或任何其他可能的方式?
使用Java代碼,可以使用下面的類
org.apache.hadoop.hdfs.tools.DFSck
使用這種方法
doWork(final String[] args)
這將在內部創建一個URI和使用的System.out打印的所有細節。
該命令找下面
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]
這指定了副本被放置在數據節點。