Использовать искру для копирования данных через кластер hadoop
У меня есть ситуация, когда мне нужно скопировать данные / файлы из PROD в UAT (кластеры hadoop). Для этого я использую 'distcp'
сейчас. но это займет вечность. Так как distcp использует map-Reduction под капотом, есть ли способ использовать spark, чтобы ускорить процесс? Как мы можем установить механизм исполнения улья в 'TEZ'
(заменить map-reduce
), можем ли мы установить двигатель исполнения для запуска distcp
? Или есть еще 'spark'
способ скопировать данные между кластерами, которые могут даже не беспокоиться о distcp?
И вот мой второй вопрос (при условии, что мы можем установить distcp
запускать механизм выполнения вместо map-Reduce, пожалуйста, не беспокойтесь, чтобы ответить на этот вопрос в противном случае):- Насколько я знаю, Spark работает быстрее, чем Map-Reduction, главным образом потому, что он хранит данные в памяти, которые могут потребоваться для обработки в нескольких случаи, когда он не должен загружать данные полностью с диска. Здесь мы копируем данные по кластерам, поэтому нет необходимости обрабатывать один файл (или блокировать или разбивать) более одного раза, так как каждый файл попадает в память, а затем отправляется по сети, копируется на целевой диск кластера. конец истории для этого файла. Тогда почему же Spark ускоряет процесс, если основная функция не используется?
2 ответа
Ваши узкие места при массовых межкластерных IO обычно
- пропускная способность между кластерами
- чтение полосы пропускания от исходного кластера
- запись пропускной способности в целевой кластер (и при 3-кратной репликации записи занимают диск и переключают пропускную способность)
- выделенное место для работы (т.е. количество исполнителей, задач)
Как правило, при загрузке на дальние расстояния ваша дальняя сеть является узким местом: вам не нужно столько рабочих, чтобы затопить сеть.
Есть известная история об операции distcp между двумя Yahoo! кластеры, которым удалось сделать именно это с частью магистрали: команда Hadoop ops рада, что distcp идет так быстро, в то время как команда network ops беспокоится о том, что их основные службы каким-то образом страдают из-за трафика между двумя сайтами. Я считаю, что этот инцидент является причиной того, что distcp теперь имеет -bandwidth
вариант:)
Там, где могут быть ограничения в distcp, это, вероятно, связано с настройкой и выполнением задачи: решение о том, какие файлы копировать, принимается заранее, и при перепланировании работы не хватает (каких-либо?) Умений, если некоторые файлы копируются быстро, а другие выдаются.
Distcp просто создает список заранее и передает его специальным картографам distcp, каждый из которых читает свой список файлов и копирует его.
Кто-то может попытаться сделать искровую версию distcp; Это мог бы быть интересный проект, если бы кто-то хотел поработать над лучшим планированием, полагаясь на тот факт, что spark очень эффективен в распространении новой работы для существующих исполнителей: версия spark может выполнять работу динамически, а не перечислять все заранее. Действительно, он все еще может начать операцию копирования, перечисляя файлы для копирования, для более быстрого запуска. Даже в этом случае: пропускная способность между кластерами, как правило, будет проблемой.
Spark не предназначен для перемещения данных между кластерами Hadoop. Вы можете посмотреть на дополнительные картографы для вашего distcp
работа с использованием "-m"
вариант.