Hadoop DistCp如何处理相同文件名的重命名问题

5

有没有办法运行DistCp,并在文件名冲突时重命名?也许通过一个例子来解释会更容易。

假设我要将hdfs:///foo复制到hdfs:///bar,而foo包含以下文件:

hdfs:///foo/a
hdfs:///foo/b
hdfs:///foo/c

并且条形图包含以下内容:

hdfs:///bar/a
hdfs:///bar/b

然后在复制后,我希望bar包含类似以下内容:
hdfs:///bar/a
hdfs:///bar/a-copy1
hdfs:///bar/b
hdfs:///bar/b-copy1
hdfs:///bar/c

如果没有这样的选项,那么最可靠/高效的方法是什么?我自己编写的 distcp 版本肯定可以完成,但这似乎需要很多工作并且容易出错。基本上,我完全不关心文件名,只关心它们所在的目录,并想定期复制大量数据到“合并”目录中。

DistCp2有一个-overwrite选项。 - Aleksei Shestakov
我知道,我不想覆盖旧文件。我想要旧文件和新文件,即使必须更改文件名才能同时存在。 - Joe K
1个回答

1
Distcp没有这个选项。如果您正在使用Java API进行操作,可以通过检查目标路径是否存在并在已存在的情况下更改路径来轻松处理它。您可以使用FileSystem对象和方法exists(Path p)来检查它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接