2011-01-06 42 views
5

是什麼,我們怎麼稱呼他們'distcp'和'distcp -update'之間的區別?

hadoop distcp 

hadoop distcp -update 

他們兩人會做同樣的工作,只有細微的差別之間的差別。它們都不會覆蓋目標中已有的文件。那麼在兩套不同的命令中有什麼意義呢?

回答

10

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 - 刪除 - 更新HFTP:// HDFS-NN1:50070/HDFS clusteA在:// HDFS-NN2:9000/clusteA在

這將更新在HDFS-NN2所有文件不從HDFS-NN1大小相匹配,以及刪除任何無關的文件。如果使用.Trash,則刪除的所有文件都將放入用戶調用distcp的垃圾箱中。

我會試驗一下,所以你可以看到各種命令的效果,因爲當你意外地清除TB數據時,可能會很痛苦,所以一定要使用垃圾桶。

+0

也適用於distcp -update有時會在羣集繁忙時失敗http://stackoverflow.com/questions/17438093/socketoveroutexception-when-running-hadoop-distcp-update-between-clusters – Bohdan 2013-07-03 00:56:32