【发布时间】:2011-01-06 01:23:49
【问题描述】:
有什么区别
hadoop distcp
和
hadoop distcp -update
他们都可以做同样的工作,只是我们称呼他们的方式略有不同。它们都不会覆盖目标中已经存在的文件。那么这两组不同的命令又有什么意义呢?
【问题讨论】:
有什么区别
hadoop distcp
和
hadoop distcp -update
他们都可以做同样的工作,只是我们称呼他们的方式略有不同。它们都不会覆盖目标中已经存在的文件。那么这两组不同的命令又有什么意义呢?
【问题讨论】:
distcp 和 distcp -update 的区别在于 distcp 默认会跳过文件,而“distcp -update”会在 src 大小与 dst 大小不同时更新文件。
这在文档中有点混乱,因为 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
这将更新 hdfs-nn2 中与 hdfs-nn1 大小不匹配的所有文件,并删除所有无关文件。如果使用 .Trash,则删除的所有文件都将放入您调用 distcp 的用户的垃圾箱中。
我会尝试一下,这样你就可以看到各种命令的效果,因为当你不小心清除了 TB 的数据时会很痛苦,所以一定要使用你的垃圾箱。
【讨论】: