Learning Platform
Глоссарий Troubleshooting
Урок 02.02 · 15 мин
Начальный
DriverExecutorCluster ManagerArchitecture

Driver и Executor: Архитектура распределённых вычислений

Каждое Spark-приложение состоит из двух типов процессов: driver и executors. Понимание их ролей — фундамент для всей дальнейшей работы со Spark.

Driver Process

Driver — это главный процесс вашего Spark-приложения. Он выполняет функцию main() и отвечает за:

  • Создание SparkContext/SparkSession — точка входа в Spark API
  • Построение DAG — граф трансформаций из вашего кода
  • Планирование задач — разбиение DAG на stages и tasks через DAG Scheduler
  • Координация executors — отправка tasks, сбор результатов, мониторинг heartbeats
  • Хранение метаданных — план выполнения, broadcast-переменные, результаты агрегаций
# Этот код выполняется на driver
spark = SparkSession.builder.appName("MyApp").getOrCreate()

# Трансформации определяются на driver, но выполняются на executors
df = spark.read.parquet("/data/users/")
result = df.filter(df.age > 25).groupBy("country").count()

# collect() тянет результат обратно в driver
result.show()

Критически важно: driver не обрабатывает данные. Он только планирует и координирует. Все вычисления над партициями данных происходят на executors.

Executor Process

Executor — это рабочий процесс, запущенный на узлах кластера. Каждый executor:

  • Получает tasks от driver через TaskScheduler
  • Выполняет вычисления над партициями данных (filter, map, join)
  • Хранит данные в памяти — кэшированные RDD/DataFrame, shuffle buffers
  • Отправляет результаты обратно driver (для actions типа count, collect)
  • Посылает heartbeats — каждые spark.executor.heartbeatInterval (10 секунд по умолчанию)

Типичное Spark-приложение имеет 2-200 executors, каждый с 1-8 cores и 1-64 ГБ памяти.

Жизненный цикл Executor

Жизненный цикл Executor
Registration
Task Assignment
Execution
Heartbeat
Speculative
Decommission

Нажмите на фазу для подробной информации

Cluster Manager

Driver и executors не запускаются сами по себе — ими управляет Cluster Manager:

Cluster ManagerКогда использоватьОсобенности
StandaloneТестирование, небольшие кластерыПростая настройка, нет внешних зависимостей
YARNHadoop-экосистемаДинамическое выделение ресурсов, интеграция с Hadoop
KubernetesCloud-native средаКонтейнеризация, auto-scaling, изоляция
MesosLegacy-системыУстаревший, не рекомендуется для новых проектов

Deploy Mode: Client vs Cluster

Режим развёртывания определяет, где запускается driver:

Client Mode (по умолчанию)

Client Mode

Ваша машина

Driver
(здесь)

Кластер

Executor 1
Executor 2
Executor 3

Driver работает на вашей машине (ноутбук, edge-node). Подходит для интерактивной работы: spark-shell, pyspark, Jupyter notebooks. Вы видите логи и результаты прямо в консоли.

Проблема: если ваша машина потеряет сетевое соединение с кластером — приложение упадёт.

Cluster Mode

Cluster Mode

Кластер

Driver
(на кластере)
Executor 1
Executor 2
Executor 3

Driver работает внутри кластера, рядом с executors. Подходит для production jobs: spark-submit --deploy-mode cluster. Приложение живёт независимо от вашей машины.

Выбор прост: интерактивная работа — client mode, production — cluster mode.

Проверка знанийKnowledge check
Почему driver не выполняет вычисления над данными напрямую?
ОтветAnswer
Driver координирует задачи и хранит метаданные (план выполнения, результаты агрегации, broadcast-переменные). Если бы driver обрабатывал данные, он стал бы узким местом -- один процесс не может параллельно обработать терабайты. Executors распределяют вычисления по кластеру, обрабатывая данные параллельно на десятках или сотнях узлов.

Память Driver vs Executor

Одна из частых ошибок — путать конфигурацию памяти driver и executor:

ПараметрЧто контролируетТипичное значение
spark.driver.memoryПамять для метаданных, broadcast, collect()1-4 ГБ
spark.executor.memoryПамять для данных, shuffle, кэш4-64 ГБ
spark.driver.coresCPU для driver1-2
spark.executor.coresCPU для параллельных tasks2-8

Driver memory хранит SparkContext, DAG metadata, broadcast-переменные и результаты collect(). Executor memory хранит партиции данных (storage), shuffle buffers (execution) и пользовательские объекты (user memory). Unified Memory Manager управляет только памятью executors — к driver он не применяется.

spark = (
    SparkSession.builder
    .appName("MemoryConfig")
    .config("spark.driver.memory", "2g")
    .config("spark.executor.memory", "8g")
    .config("spark.executor.cores", "4")
    .config("spark.executor.instances", "10")
    .getOrCreate()
)

Spark Connect Spark4.0

Начиная со Spark 3.4 и особенно в Spark 4.0, Spark Connect становится основной моделью взаимодействия. Вместо запуска driver в том же процессе, Spark Connect использует клиент-серверную архитектуру:

Ваш код (thin client) ──gRPC──> Spark Connect Server ──> Executors

Преимущества: изоляция клиента от кластера, поддержка нескольких языков, стабильное API. Это изменение не меняет архитектуру driver/executor, но меняет способ взаимодействия с ними.

Проверка знанийKnowledge check
В чём практическая разница между client и cluster deploy modes для production-задач?
ОтветAnswer
В client mode driver работает на машине, откуда запущен spark-submit. Если эта машина выключится или потеряет сеть -- всё приложение упадёт, потому что executors потеряют связь с driver. В cluster mode driver запускается внутри кластера (как обычный container/process), что обеспечивает отказоустойчивость: приложение продолжит работу независимо от вашей машины. Для production всегда используйте cluster mode.

Как executor устроен внутри Spark — на уровне исходников — в курсе Apache Spark Internals:

Spark Internals: жизненный цикл executor

Что дальше?

В следующем уроке мы разберём SparkSession и SparkContext — точки входа в Spark API, через которые driver создаёт и управляет вычислениями.

Проверьте понимание

Результат: 0 из 0
Концептуальный
Вопрос 1 из 4. Какой компонент Spark отвечает за построение DAG, планирование задач и координацию executors?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 3