Почему задержка запуска искровых исполнителей? - PullRequest
0 голосов
/ 26 января 2020

При попытке оптимизировать работу Spark у меня возникают проблемы с пониманием задержки 3-4 с при запуске второго и 6-7 с третьего и четвертого исполнителей.

Это то, что я работа с:

  • Spark 2.2

  • Два рабочих узла с 8 ядрами процессора в каждом. (отдельный главный узел)

  • Исполнители настроены на использование 3 ядер каждое.

Ниже приведен скриншот вкладки заданий в пользовательском интерфейсе Spark.

Работа делится на три этапа. Как видно, второй, третий и четвертый исполнители добавляются только на втором этапе. Job description

Ниже приводится описание этапа 0. Stage 0 description

И после выполнения этапа 1. Stage 1 description

Как видно на рисунке выше, для запуска executor 2 (на том же рабочем месте, что и первый) требуется около 3 с. Исполнители 3 и 4 (на втором работнике) заняли еще больше времени, примерно 6 с.

Я попытался поиграться с переменной spark.locality.wait: значения 0 с, 1 с, 1 мс. Но, похоже, что время запуска исполнителей не изменилось.

Есть ли какая-то другая причина этой задержки? Где еще можно посмотреть, чтобы лучше это понять?

Ответы [ 2 ]

2 голосов
/ 26 января 2020

Возможно, вам будет интересно проверить политику Spark для запросов на выполнение и просмотреть параметры spark.dynamicAllocation.schedulerBacklogTimeout и spark.dynamicAllocation.sustainedSchedulerBacklogTimeout для вашего приложения.

Приложение Spark с Dynami c распределение разрешено запрашивает дополнительных исполнителей, когда ожидающие задачи ожидают планирования. ...

Спарк просит исполнителей в раундах. Фактический запрос запускается, когда ожидающие задачи находились в течение spark.dynamicAllocation.schedulerBacklogTimeout секунд, а затем запускается снова каждые 1011 * секунд после этого, если очередь ожидающих задач сохраняется. Кроме того, количество исполнителей, запрошенных в каждом раунде, увеличивается в геометрической прогрессии по сравнению с предыдущим туром. Например, приложение добавит 1 исполнителя в первом раунде, а затем 2, 4, 8 и т. Д. В последующих раундах.

Другим потенциальным источником задержки может быть spark.locality.wait , Поскольку на этапе 1 у вас есть довольно много задач с неоптимальными уровнями локальности (Rack local: 59), а значение по умолчанию для spark.locality.wait составляет 3 секунды, это может быть основной причиной задержек, которые вы видите .

0 голосов
/ 26 января 2020

Требуется время, чтобы пряжа создала исполнителей. С этими накладными расходами ничего не поделаешь. Если вы хотите оптимизировать, вы можете настроить сервер Spark, а затем создавать запросы для сервера, и это экономит время прогрева.

...