2011-01-06 6 views
5

В чем разница междуРазница между 'distcp' и 'distcp-update'?

hadoop distcp 

и

hadoop distcp -update 

Оба они будут делать ту же работу, только с небольшой разницей в том, как мы их называем. Ни один из них не перезаписывает уже существующий файл в пункте назначения. Какой смысл тогда в двух разных наборах команд?

ответ

10

Разница между distcp и distcp-update заключается в том, что distcp по умолчанию пропускает файлы, в то время как «distcp -update» обновляет файл, если размер src отличается от размера dst.

Это немного запутанно в документации, поскольку характер distcp по умолчанию заключается в пропуске, если файл существует для предотвращения столкновения.

Из документов: «Как отмечено в предыдущем, это не является« синхронизацией ». Единственным критерием проверки является размер исходного и целевого файлов, если они отличаются, исходный файл заменяет целевой файл».

Имейте в виду, что -update не является дельта-xfer-algo, как rsync, и делает только проверку размера, что не идеально, когда файлы имеют одинаковый размер, но данные разные.

Я также должен разработать некоторые из них и объяснить, что «distcp -overwrite» перезапишет файл независимо от того, соответствует ли размер или нет. Это разрушительный процесс, поэтому убедитесь, что вы действительно хотите это сделать.

Некоторые большие примеры можно найти здесь: http://hadoop.apache.org/common/docs/r0.19.2/distcp.html#uo

Я также хочу, чтобы дать пример того, что я делаю в операции синхронизации между двумя кластерами:

Hadoop distcp -pugp -i -удалено -update hftp: // hdfs-nn1: 50070/clustera hdfs: // hdfs-nn2: 9000/clustera

Это обновит все файлы в hdfs-nn2, которые не совпадают по размеру с hdfs-nn1, а также удалите все посторонние файлы. При использовании .Trash, любые удаленные файлы помещаются в ваш Trash пользователя, вызывающего distcp.

Я бы немного экспериментировал с ним, чтобы вы могли видеть эффект различных команд, так как это может быть болезненно, когда вы случайно уничтожаете ТБ данных, поэтому определенно используйте свою корзину.

+0

также для меня distcp -update не удается иногда, когда кластер занят http://stackoverflow.com/questions/17438093/sockettimeoutexception-when-running-hadoop-distcp-update-between-clusters – Bohdan

Смежные вопросы