Помощь в сокращении времени выполнения операции distcp - PullRequest
0 голосов
/ 09 января 2019

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

Некоторые из этих заданий выполняются часами (для таблиц (в формате ORC), которые огромны. Есть ли способ оптимизировать операцию distcp между двумя кластерами). Любые предложения приветствуются.

Мы попытались использовать пропускную способность для ускорения. ниже приведена выдержка из нашего сценария.

PROP = "- Dmapreduce.task.timeout = 300000 -Dmapred.job.queue.name = $ YARN_QUEUE -Dmapred.job.name =" cpy - $ {jobName} "-пропускная способность 800"

hadoop distcp $ {PROP} $ 1 WEBHDFS: // $ DESTNAMENODE $ 2 >> $ 3 2> & 1

1 Ответ

0 голосов
/ 09 января 2019

Три вещи, на которые я обычно обращаю внимание при настройке производительности distcp;

  • количество картографов, используемых для операции distcp

Опция '-m' позволит вам указать количество используемых задач карты, так сказать, максимальное количество одновременных копий. Попробуйте запустить копию пару раз и постепенно увеличивайте это число, чтобы увидеть, что лучше всего подходит для вашего сценария.

  • стратегия динамическая

Вы можете запустить задание DistCp с флагом «-strategy dynamic», который будет «динамически» отображать карты размеров, позволяя более быстрым или более отзывчивым узлам копировать больше данных, чем медленные или занятые узлы. Вы можете прочитать больше об этом в руководстве DistCp.

  • ширина полосы

Похоже, вы уже экспериментировали с опцией '-bandwidth', но я хотел бы упомянуть об этом здесь, поскольку это, безусловно, важный фактор. Попробуйте увеличить это еще больше, если ваша сеть позволяет это.

...