Раздел 26 · Data Engineering

MLlib, развёртывание и конфигурация

junior~15 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

До сих пор кластер был готов заранее: два исполнителя по два ядра, переменная spark под рукой. В работе дата-инженера всё начинается раньше: скрипт надо отправить на кластер, попросить ресурсы и выставить настройки. От этих решений зависит, займёт ночной пересчёт десять минут или три часа. Разберём, как это устроено, и коротко посмотрим на MLlib, библиотеку машинного обучения Spark.

Как скрипт попадает на кластер

Скрипт PySpark отправляют командой spark-submit. В ней вы говорите, куда отправить, сколько ресурсов взять и что запустить:

spark-submit \
  --master k8s://https://k8s.gonets.internal:6443 \
  --deploy-mode cluster \
  --name gonets-daily-revenue \
  --num-executors 10 \
  --executor-cores 4 \
  --executor-memory 8g \
  --driver-memory 2g \
  --conf spark.sql.shuffle.partitions=80 \
  daily_revenue.py --day 2026-06-30
  • --master выбирает менеджер кластера: Kubernetes, YARN или встроенный spark://. Для отладки на ноутбуке пишут local[4]: всё в одном процессе на четырёх ядрах.
  • --deploy-mode cluster запускает драйвер внутри кластера, рядом с исполнителями. В режиме client драйвер живёт на машине, откуда вы отправили задание, например на сервере Airflow.
  • --num-executors, --executor-cores, --executor-memory задают ресурсы: здесь 10 исполнителей по 4 ядра, всего 40 ядер, и по 8 ГБ памяти каждому.
  • --conf задаёт любую настройку Spark, то же, что spark.conf.set в коде.

Вместо фиксированного числа исполнителей можно включить динамическое выделение: Spark сам попросит больше исполнителей на тяжёлой стадии и отдаст их, когда работа кончится.

Сколько просить

Несколько правил, которые сходятся у большинства команд:

  • 4-5 ядер на исполнителя. Одно ядро на исполнителя плохо использует память и кэш, двадцать ядер на одного упираются в сборщик мусора JVM и ввод-вывод.
  • Память на ядро. На каждую задачу нужны память под shuffle, сортировку и данные партиции. Ориентир 2-4 ГБ на ядро. Плюс запас на служебные нужды JVM: Spark добавляет к executor-memory ещё около 10% сверху.
  • Партиций в 2-4 раза больше, чем ядер. Об этом был урок про партиционирование.

урок из курса

Урок из курса «Data Engineering». Курс покупается один раз и остаётся навсегда: 500 ₽.

Оплата пока не подключена: премиум и курсы открываются промокодом.