是否有任何方法可以运行distcp,但是可以在文件名冲突时使用重命名选项?也许用一个例子来解释是最简单的。
假设我正在复制到hdfs:///foo到hdfs:///bar,foo包含以下文件:
hdfs:///foo/a
hdfs:///foo/b
hdfs:///foo/c
吧台上有:
hdfs:///bar/a
hdfs:///bar/b
在复制之后,我想在吧台上放一些东西,比如:
hdfs:///bar/a
hdfs:///bar/a-copy1
hdfs:///bar/b
hdfs:///bar/b-copy1
hdfs:///bar/c
如果没有这样的选择,最可靠/最有效的方法是什么?我自己开发的distcp版本当然可以完成,但这似乎需要大量的工作,而且很容易出错。基本上,我根本不关心文件名,只关心它们的目录,我希望定期将大量数据复制到“合并”目录中。
1条答案
按热度按时间brccelvz1#
distcp没有这个选项。如果您使用的是javaapi,那么可以通过检查目标路径是否存在并在其已经存在的情况下更改路径来轻松地处理它。你可以用一个
FileSystem
使用方法的对象exists(Path p)
.