是否有办法运行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版本当然可以做到这一点,但这似乎需要做很多工作,而且很容易出错。基本上,我根本不关心文件名,只关心它们的目录,并且我希望定期将大量数据复制到"合并"目录中。
Distcp没有这个选项。如果您正在使用Java API,则可以通过检查目标路径是否存在并在目标路径已经存在的情况下更改路径来轻松处理此问题。您可以使用exists(Path p)
方法对FileSystem
对象进行检查。