Vipin,
При установке динамического распределения в искре, как я вижу, что вы включите его и установить мин исполнителей. Но, когда вам нужно 200 исполнителей быстрее, распределение имеет одну конфигурацию с именем spark.dynamicAllocation.schedulerBacklogTimeout
, для которой по умолчанию используется 1 с таймаутом.
Это означает, что после 1 секунды, если вы не выполнили задачу, она выделит больше исполнителей.
Согласно documentation в saprk, который говорит: запросы
Спарк исполнителей в раундах. Фактический запрос запускается, когда есть ожидающие задачи для spark.dynamicAllocation.schedulerBacklogTimeout секунд, а затем запускается снова каждый spark.dynamicAllocation.sustainedSchedulerBacklogTimeout секунд после этого, если очередь ожидающих задач сохраняется. Кроме того, количество исполнителей, запрошенных в каждом раунде, экспоненциально увеличивается с предыдущего раунда. Например, приложение добавит 1 исполнителя в первом раунде, а затем 2, 4, 8 и т. Д. Исполнителей в последующих раундах.
Таким образом, для каждого seccond Spark выделяют 2^n для n секунд задержки. Чтобы связаться с исполнителем 200, вам нужно подождать не менее 8 секунд, чтобы попросить исполнителей прясть. И еще несколько секретов, чтобы решить это.
Возможно, если вы поднимете количество ядер, это поможет вам. Но если вы используете полные ядра каждого узла ... Ну, это не решение.
Является ли внедрение открытия исполнителей вроде 1 2 4 8 частным? как моя проблема может быть решена, если я смогу сделать это 10 20 30, так как моя система открывает новый vm, как это – vipin
Ну, я проверял код. Кажется, это непринужденно. См. Ссылку: https://github.com/apache/spark/blob/6ee28423ad1b2e6089b82af64a31d77d3552bb38/core/src/main/scala/org/apache/spark/ExecutorAllocationManager.scala#L309 –