2011-01-06 12 views
5

Qual è la differenza traDifferenza tra 'distcp' e 'distcp -update'?

hadoop distcp 

e

hadoop distcp -update 

Entrambi avrebbero fatto lo stesso lavoro con solo una leggera differenza nel modo in cui li chiamiamo noi. Nessuno di questi sovrascrive un file già esistente nella destinazione. Qual è il punto allora in due diversi set di comandi?

risposta

10

La differenza tra distcp e distcp -update è che distcp di default salta i file mentre "distcp -update" aggiornerà un file se la dimensione di src è diversa dalla dimensione di dst.

È un po 'di confusione nella documentazione, poiché la natura predefinita di distcp è di saltare se esiste un file per evitare la collisione.

Dai documenti: "Come indicato in precedenza, questa non è un'operazione di" sincronizzazione ", l'unico criterio esaminato è la dimensione del file di origine e di destinazione, se differiscono, il file di origine sostituisce il file di destinazione."

Tenere presente -update non è un algoritmo delta-xfer come rsync e fa solo un controllo delle dimensioni, il che non è perfetto quando i file hanno le stesse dimensioni ma i dati sono diversi.

Devo anche elaborare alcuni e spiegare che "distcp -overwrite" sovrascriverà il file indipendentemente dal fatto che la dimensione corrisponda o meno. È un processo distruttivo, quindi assicurati di volerlo davvero fare.

Alcuni ottimi esempi si possono trovare qui: http://hadoop.apache.org/common/docs/r0.19.2/distcp.html#uo

Voglio anche dare un esempio di quello che faccio in un'operazione di sincronizzazione tra due cluster:

Hadoop distcp -pugp -i -delete -update hftp: // hdfs-nn1: 50070/clustera hdfs: // hdfs-nn2: 9000/clustera

Questo aggiornerà tutti i file in hdfs-nn2 che non corrispondono in dimensione da hdfs-nn1, così come cancella tutti i file estranei. Se si utilizza. Trash, tutti i file eliminati vengono inseriti nel Cestino dell'utente che invoca distcp.

vorrei sperimentare con esso un po 'in modo da poter vedere l'effetto di vari comandi, dal momento che può essere doloroso quando si cancella accidentalmente TB di dati in modo sicuramente utilizzare il Cestino.

+0

anche per me distcp -update non riesce a volte quando il cluster è occupato http://stackoverflow.com/questions/17438093/sockettimeoutexception-when-running-hadoop-distcp-update-between-clusters – Bohdan