TGViewer
Дмитрий Кузьмин | Инженерия данных Дмитрий Кузьмин | Инженерия данных @kuzmin_dmitry91 · 1.75K subscribers
Post #124 1.27K
😄 DAG не стартует при dynamicAllocation.enabled = true
Или как подобрать параметры SparkSession.

Продолжаем deep dive into 😄

Неделю назад для меня была загадка, почему при наличии ресурсов в очереди в Yarn мой DAG не стартует. Подождал, еще подождал, сходил на обед, а когда вернулся, DAG до сих пор не стартовал 😡

config('spark.dynamicAllocation.minExecutors', 'n')


Если тут вместо n стоит 0, то сессия может даже не стартовать при наличии ресурсов, если ваш DAG не представляет большой нагрузки.

😄 Чуть капнем вглубь и посмотрим на другие параметры.

Spark-джоб падает по памяти или работает слишком долго, и первое, что хочется сделать — накинуть ресурсов: больше памяти, больше ядер. Но если кластер ограничен (очередь, лимит на команду), то нужно подобрать параметры с умом.

Ключевое, на что смотреть:

spark.executor.memory — объём памяти на executor (например, 4g)
spark.executor.cores — число ядер на executor
spark.sql.shuffle.partitions — количество партиций при shuffle

😄 Зачем в этом разбираться?

Давай просто накинем ресурсов! Нет. Повторюсь:

Это спрашивают на собесах + нужно, если ваш кластер небольшой, а пользователей много.


😄 Определи ограничения
Перед тем как крутить SparkSession, нужно понять, какие у тебя есть лимиты:

Сколько всего памяти доступно на кластере (например, 64 GB)
Сколько CPU-ядер доступно (например, 16)
Используешь ли ты Dynamic Allocation? Если да — настрой minExecutors, maxExecutors

😄 Подбери executor'ы
Допустим, ты хочешь:

executor.memory = 8g
executor.cores = 4


Считаем:
по памяти: 64 GB / 8 GB = 8 executors
по ядрам: 16 cores / 4 = 4 executors


❗️Значит максимум — 4 executors, потому что упираемся в CPU.

😄 Настрой shuffle.partitions
По умолчанию Spark выставляет spark.sql.shuffle.partitions = 200 — это почти всегда не оптимально.

Где-то читал, что shuffle.partitions ≈ 2–3 × общее число ядер у executors (в другом источнике 1,5 × общее число ядер). Кому верить? Тут нужно крутить и смотреть на своем DAG.

Если у тебя 4 executors × 4 cores = 16 ядер
То поставь:
spark.sql.shuffle.partitions = 32–50


😄 Настрой Dynamic Resource Allocation
Думаю, что почти все работают с этой настройкой 😂

Если включён (spark.dynamicAllocation.enabled = true), то:

minExecutors — минимальное число executors (например, 2, а не 0!)
maxExecutors — максимум, который можно масштабировать

spark.conf.set("spark.dynamicAllocation.enabled", "true")
spark.conf.set("spark.dynamicAllocation.minExecutors", "2")
spark.conf.set("spark.dynamicAllocation.maxExecutors", "10")


😄 Пара задач с собесов:

Вопрос 1.

spark.executor.memory = 500g — это норм?


Вопрос 2.

У вас есть кластер с 96 GB RAM и 24 CPU.
Нужно, чтобы каждый executor получал 6 GB памяти и 3 ядра.
Сколько executors вы можете запустить одновременно?


Это база, которая проверяет, насколько вы погружены в общую архитектуру Spark.

😄 Ответы можете кидать в комменты. И другие вопросы, которые вам задавали по этой теме.

Ставь реакцию:

🔥 - я это знаю
🤔 - было полезно и надо в этом разобраться

#база_знаний
  • 🤔 14
  • 🔥 7
  • ❤ 1
More from @kuzmin_dmitry91
  1. Sep 25, 2026Можно отдельно изучить SQL, Spark и Airflow, а потом всё равно не понимать, как связать их…
  2. Sep 22, 2026Почему RAG-бот иногда отвечает «не знаю» ✍️ В августе я только начинал погружаться в RAG и…
  3. Sep 18, 2026У блога появился свой герой 🐻 В последнее время здесь много пайплайнов, проверок качества…
  4. Sep 15, 2026💬 Какой результат SQL отправить бизнесу? Ребят, одна из частых ошибок в SQL-задачах состо…
  5. Sep 11, 2026Когда пайплайн упал в пятницу в 18:30, но дежуришь не ты. С пятницей! Пусть выходные пройд…
  6. Sep 10, 2026Сначала выучу весь DE-стек У меня переход в Data Engineering тормозился примерно на этой м…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →