如何在Hadoop HDFS目录中移动文件?

时间:2013-11-07 06:11:53

标签: java hadoop mapreduce hdfs

我需要将文件从一个HDFS目录移动到另一个HDFS目录。

我想检查是否有更简单的方法(某些HDFS API)来实现相同的任务,而不是InputStream / OutputStream?

我听说过FileSystem.rename(srcDir, destDir);,但不确定这是否会删除原来的src目录。

我不想删除原始目录结构,只将文件从一个文件夹移动到另一个目录。

e.g

input Dir - /testHDFS/input/*.txt
dest Dir - /testHDFS/destination

移动文件后,目录应如下所示: -

input Dir - /testHDFS/input
dest Dir - /testHDFS/destination/*.txt

PS:我想在每个文件的mapper函数中实现这个功能。

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:4)

FileSystem.rename将文件从源目录移动到目标目录。我相信你可以根据你的要求使用它。

答案 1 :(得分:1)

执行此操作的最佳方法是使用org.apache.hadoop.fs.FileUtil.copy(),将deleteSource参数设置为true。人们通常使用FileSystem.rename(),但该函数会因无形问题而无声地失败(such as the source and destination Paths being on different volumes

答案 2 :(得分:0)

您可以通过编程verify this

使用DistCp