'distcp'和'distcp -update'之间的区别?

Har*_*rsh 6 hadoop mapreduce hdfs

有什么区别

hadoop distcp
Run Code Online (Sandbox Code Playgroud)

hadoop distcp -update
Run Code Online (Sandbox Code Playgroud)

他们两个都会做同样的工作,我们称他们的方式略有不同.它们都不会覆盖目标中已存在的文件.那么在两组不同的命令中有什么意义呢?

小智 14

distcp和distcp -update之间的区别在于默认情况下distcp会跳过文件,而如果src size与dst size不同,"distcp -update"将更新文件.

它在文档中有点令人困惑,因为如果存在防止冲突的文件,则跳过distcp的默认属性.

来自文档:

"如前所述,这不是"同步"操作.检查的唯一标准是源文件和目标文件大小;如果它们不同,源文件将替换目标文件."

请记住-update,不是像rsync这样的delta-xfer算法,只进行大小检查,当文件大小相同但数据不同时,这并不完美.

我还应该详细说明并解释一下,distcp -overwrite无论大小是否匹配,都会覆盖文件.这是一个破坏性的过程,所以要确保你真的想要这样做.

可以在这里找到一些很好的例子:http://hadoop.apache.org/common/docs/r0.19.2/distcp.html#uo

我还想举例说明我在两个集群之间的同步操作中所做的事情:

hadoop distcp -pugp -i -delete -update hftp://hdfs-nn1:50070/clustera hdfs://hdfs-nn2:9000/clustera
Run Code Online (Sandbox Code Playgroud)

这将更新hdfs-nn2中与hdfs-nn1大小不匹配的所有文件,以及删除任何无关的文件.如果使用.Trash,则删除的所有文件都会放在用户调用distcp的Trash中.

我会稍微试验一下,这样你就可以看到各种命令的效果,因为当你不小心消灭TB的数据时会很痛苦,所以一定要使用你的垃圾桶.