如何在 Hadoop HDFS 目录中移动文件?
Posted
技术标签:
【中文标题】如何在 Hadoop HDFS 目录中移动文件?【英文标题】:How to move files within the Hadoop HDFS directory? 【发布时间】:2013-11-07 06:11:53 【问题描述】:我需要将文件从一个 HDFS 目录移动到另一个 HDFS 目录。
我想检查除了 InputStream/OutputStream 是否有更简单的方法(一些 HDFS API)来完成相同的任务?
我听说过FileSystem.rename(srcDir, destDir);
,但不确定这是否会删除原始 src 目录。
我不想删除原始目录结构,只是将文件从一个文件夹移动到另一个目录。
例如
input Dir - /testHDFS/input/*.txt
dest Dir - /testHDFS/destination
移动文件后,目录应如下所示:-
input Dir - /testHDFS/input
dest Dir - /testHDFS/destination/*.txt
PS:我想在每个文件的映射器函数中实现这个工作。
任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:FileSystem.rename 会将文件从源目录移动到目标目录。我相信你可以用它来满足你的要求。
【讨论】:
重命名目录会删除我原来的目录吗?我不想删除那个结构。 如何使用 python 脚本实现这一点。我需要重命名文件系统目录。?除了 -mv 在 python 中还有什么方法吗?rename()
只是重新链接,如果您的源目录和目标目录位于不同的卷上(没有任何解释),则会失败。相反,使用 FileUtil.copy 和 deleteSource=true
【参考方案2】:
最好的方法是使用org.apache.hadoop.fs.FileUtil.copy()
,将deleteSource
参数设置为true
。人们通常使用FileSystem.rename()
,但该功能会因看不见的问题而静默失败(such as the source and destination Paths being on different volumes)
【讨论】:
【参考方案3】:您可以通过编程方式使用 DistCp verify this
【讨论】:
以上是关于如何在 Hadoop HDFS 目录中移动文件?的主要内容,如果未能解决你的问题,请参考以下文章