我需要将文件从一个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函数中实现这个功能。
任何帮助都将不胜感激。
答案 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