如何在 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 目录中移动文件?的主要内容,如果未能解决你的问题,请参考以下文章

hadoop基本操作

如何判断hdfs(hadoop)上的路径是文件还是目录。

分享知识-快乐自己:Hadoop 常用基础命令

hadoop上删除文件

hdfs命令查找文件所在路径

Hadoop 解压缩目录中的文件并将每个文件单独移动到另一个文件夹