Динамическое Распределение с искровым потоком на пряже, не уменьшая исполнителей
Я использую потоковую передачу spark (spark версии 2.2) на кластере пряжи и пытаюсь включить динамическое распределение ядра для своего приложения.
Количество исполнителей увеличивается по мере необходимости, но как только назначены исполнители, они не уменьшаются даже при уменьшении трафика, т. Е. Исполнитель после выделения не освобождается. Я также включил службу внешнего перемешивания на пряжу, как уже упоминалось здесь: https://spark.apache.org/docs/latest/running-on-yarn.html
Конфиги, которые я установил в команде spark-submit:
--conf spark.dynamicAllocation.enabled=false \
--conf spark.streaming.dynamicAllocation.enabled=true \
--conf spark.streaming.dynamicAllocation.scalingInterval=30 \
--conf spark.shuffle.service.enabled=true \
--conf spark.streaming.dynamicAllocation.initialExecutors=15 \
--conf spark.streaming.dynamicAllocation.minExecutors=10 \
--conf spark.streaming.dynamicAllocation.maxExecutors=30 \
--conf spark.streaming.dynamicAllocation.executorIdleTimeout=60s \
--conf spark.streaming.dynamicAllocation.cachedExecutorIdleTimeout=60s \
Может кто-нибудь помочь, если есть какой-то конкретный конфиг, который мне не хватает?
Спасибо
1 ответ
Документ, добавленный как часть этого JIRA, помог мне: https://issues.apache.org/jira/browse/SPARK-12133.
Ключевым моментом, который следует отметить, было то, что количество исполнителей сокращается, когда соотношение (время пакетной обработки / длительность пакета) меньше 0,5(значение по умолчанию), что, по сути, означает, что исполнители бездействуют в течение половины времени. Конфигурация, которая может использоваться для изменения этого значения по умолчанию, является "spark.streaming.dynamicAllocation.scalingDownRatio"