Apache Spark™: как устроен популярный инструмент для работы с большими данными

Apache Spark — стандарт в мире больших данных. Платформа сочетает высокую скорость, универсальность и мощный аналитический движок для решения задач от ETL и потоковой обработки до машинного обучения.

Краткий пересказ YandexGPT
  • Apache Spark — унифицированный движок для обработки больших данных, поддерживающий Python, Scala, Java, R и предоставляющий инструменты для SQL-запросов, машинного обучения и обработки потоковых данных.
  • Spark возник в 2009 году в лаборатории AMPLab Калифорнийского университета в Беркли как проект для преодоления ограничений Apache Hadoop® и его модели MapReduce.
  • Ключевой инновацией Spark стала абстракция Resilient Distributed Datasets (RDD), которая позволяет хранить данные в оперативной памяти и значительно ускоряет итеративные задачи по сравнению с Hadoop®.
  • Среди основных сценариев использования Spark — ETL и инжиниринг данных, потоковая обработка данных, интерактивная аналитика и BI, подготовка данных для машинного обучения.
  • Архитектура Spark построена по модели «ведущий — ведомые» и включает три основных компонента: программу-драйвер (координирующий процесс), исполнителей (рабочие процессы) и менеджер кластера (отвечает за выделение ресурсов).
  • В архитектуре Lakehouse Spark часто выступает вычислительным слоем, обеспечивая ELT-преобразования, единый API для пакетной и потоковой обработки, SQL-аналитику и разделение хранения и вычислений.
  • Yandex Cloud предлагает управляемые сервисы для работы с Spark: Yandex Data Processing (для экосистемы Hadoop + Spark) и Yandex Managed Service for Apache Spark (специализированный управляемый кластер Spark).
Тезисы сформулированыYandexGPT
Спасибо!

Постоянный рост данных из соцсетей, IoT-устройств и транзакционных систем показал, что традиционные базы данных достигли своего предела. Их архитектура оказалась не готова к петабайтным архивам и разнородным форматам, и это потребовало создания принципиально новых инструментов. Эту проблему решают распределённые системы, способные «распараллеливать» вычисления на тысячи узлов. Именно в этой области Apache Spark стал ключевой технологией.

Apache Spark — это унифицированный движок (его также называют платформой или фреймворком), который поддерживает языки программирования Python, Scala, Java и R и предоставляет готовые инструменты для SQL-запросов, машинного обучения и обработки потоковых данных.

На практике Spark часто используют как вычислительный слой современной платформы данных: он помогает строить конвейеры ETL/ELT, обрабатывать потоки и выполнять SQL-аналитику поверх данных в объектном хранилище. Такой подход хорошо сочетается с архитектурой Lakehouse (табличные форматы вроде Apache Iceberg® или Delta Lake + объектное хранилище + масштабируемые вычисления Spark).

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

История Apache Spark: от лаборатории до стандарта индустрии

Apache Spark появился в 2009 году. Он вырос из исследовательского проекта лаборатории AMPLab Калифорнийского университета в Беркли. Этим проектом руководил учёный в области информатики Матей Захария.

Команда разработчиков искала способ обойти недостатки Apache Hadoop® — платформы для распределённых вычислений — и её программной модели MapReduce. В то время MapReduce хорошо справлялась с пакетной обработкой, но модель была неэффективна для итеративных алгоритмов, выполняющих повторяющиеся вычисления, и интерактивных запросов, требующих быстрого ответа. После каждого шага MapReduce записывала промежуточные результаты на диск. Такой подход приводил к большим задержкам.

Это оказалось слишком медленно для задач машинного обучения. Алгоритмам в этой сфере часто нужен многократный доступ к одним и тем же данным, а постоянные дисковые операции сильно замедляли процесс.

Решением стала принципиально новая абстракция — Resilient Distributed Datasets (RDD). Это отказоустойчивая распределённая коллекция объектов, которую можно было хранить в оперативной памяти между вычислениями. Благодаря RDD и обработке в памяти итеративные задачи в Spark стали выполняться в десятки раз быстрее, чем в Hadoop®.

Идея оказалась прорывной. В 2010 году Spark стал проектом с открытым исходным кодом. В 2013 году его передали в Apache Software Foundation, а уже в 2014-м он получил статус проекта верхнего уровня. С тех пор Spark вырос в один из самых активных опенсорс-проектов в области больших данных. Его поддерживают тысячи организаций и независимых разработчиков.

Платформу продолжили развивать, чтобы повысить её производительность и удобство. Сначала появились DataFrame для работы со структурированными данными. Позже их объединили с типизированными Dataset. Это объединение открыло доступ к мощным оптимизаторам Catalyst и Tungsten. В версии 3.0 представили Adaptive Query Execution (AQE) — механизм, который динамически оптимизирует запросы прямо в процессе их выполнения.

Важным шагом стал выпуск Spark 4.0 в мае 2025 года. Новая версия улучшила SQL, добавила возможности для потоковой обработки данных и расширила языковую поддержку. Последнюю версию Spark 4.1.0 выпустили в сентябре 2025 года.

Основные сценарии использования Apache Spark

Универсальность Apache Spark позволяет применять его в разных областях. Платформа стала общепринятым подходом для многих задач по обработке больших данных. В 2026 году можно выделить четыре основных сценария её использования.

ETL и инжиниринг данных

Извлечение, преобразование и загрузка данных — ETL — остаётся одной из главных задач для Spark. Организации применяют его для построения сложных конвейеров данных.

ETL против ELT: как меняется архитектура данных в облачную эпоху

Spark читает данные из множества источников. Он работает с реляционными базами данных и хранилищами NoSQL, то есть нереляционного типа. Фреймворк также обращается к файловым системам, таким как HDFS — распределённой файловой системе Hadoop, — и к облачным объектным хранилищам.

Фреймворк очищает данные, агрегирует, обогащает и преобразует их в нужный формат. Поддержка Spark SQL даёт инженерам данных возможность применять привычный синтаксис SQL для описания логики преобразований. Масштабируемость платформы позволяет обрабатывать петабайты данных в рамках одного задания.

Потоковая обработка данных

Анализ данных в реальном времени нужен многим современным приложениям. В Apache Spark для работы с непрерывными потоками предназначен модуль Structured Streaming. Он применяет тот же API, что используется и для пакетной обработки.

Потоковую обработку применяют в разных сценариях. Например, она помогает отслеживать финансовые транзакции для выявления мошеннических операций. Её также используют для анализа поведения пользователей на веб-сайтах, чтобы персонализировать контент. Ещё один пример — обработка данных с IoT-датчиков, которая нужна для предиктивного обслуживания оборудования.

Модуль Structured Streaming отличается низкой задержкой и поддерживает семантику exactly-once. Она гарантирует, что каждая запись в потоке будет обработана ровно один раз, исключая дублирование или потерю данных. Такие характеристики позволяют использовать модуль для критически важных приложений, работающих в реальном времени.

Интерактивная аналитика и BI

Spark SQL позволяет выполнять быстрые распределённые запросы стандарта ANSI SQL. Эту возможность используют для интерактивной аналитики: построения дашбордов и аналитики по требованию. Spark SQL часто работает быстрее многих традиционных хранилищ данных.

Аналитики могут подключаться к кластеру Spark через стандартные драйверы JDBC или ODBC. Это даёт им возможность использовать привычные BI-инструменты для анализа больших данных.

Spark универсален в работе с данными. Он поддерживает как структурированные форматы, например Parquet и Delta Lake, так и полуструктурированные, такие как JSON.

Практические сценарии: где Spark даёт максимальный эффект

Ниже — примеры типовых задач, где Apache Spark используют как вычислительный слой для пакетной и потоковой обработки, построения витрин и подготовки данных для ML.

Отрасль или команда

Данные

Бизнес-задача

Что делает Spark (типичный пайплайн)

Результат

Ритейл, аналитика продаж

Чеки, товары, акции, трафик, остатки

Витрины для BI и планирования закупок

ETL в DataFrame или Spark SQL: нормализация справочников, join чеков и промо, агрегаты по магазинам или категориям, расчёт KPI

Быстрые витрины, единые метрики, меньше ручной подготовки данных

Финтех, антифрод

Транзакции, устройства, геоданные, события

Выявление мошенничества почти в реальном времени

Structured Streaming: чтение событий, обогащение профилем клиента, правила или скоринг, запись алертов и фичей в хранилище

Снижение потерь, реакция на аномалии «по ходу потока»

Промышленность, IoT

Телеметрия датчиков, логи, ремонты

Предиктивное обслуживание

Streaming + batch: очистка или ресемплинг сигналов, расчёт оконных агрегатов, сбор фичей, обучение или переобучение моделей

Меньше простоев, ремонт «по состоянию», а не по графику

Маркетинг, продуктовая аналитика

Клики, просмотры, события приложений

Персонализация и сегментация

Расчёт поведенческих признаков, построение сегментов, подготовка датасетов для рекомендаций

Рост конверсии, единый слой признаков

Логистика

Заказы, статусы, маршруты, GPS

Оптимизация сроков и маршрутов

Пакетная обработка больших исторических наборов, объединение источников, расчёт метрик SLA, подготовка данных для моделей ETA

Стабильнее сроки, прозрачность качества доставки

Data Science, ML-платформы

Фичи, лейблы, датасеты

Единый конвейер подготовки данных и обучения

Разработка функциональных возможностей в Spark, разбиение тестирования, MLlib или интеграция с TensorFlow или PyTorch, запись фичей в табличный формат

Воспроизводимость и масштабируемость ML-пайплайнов

Внутренняя архитектура и основные концепции

Архитектура Apache Spark построена по модели «ведущий — ведомые». Работу приложения координируют три основных компонента:

Программа-драйвер (Driver Program). Это центральный координирующий процесс, выступающий в роли ведущего. Он запускает основную функцию main () приложения и создаёт SparkContext — точку входа для взаимодействия с кластером. Драйвер преобразует код в логический и физический планы выполнения, а затем распределяет задачи между исполнителями.

Исполнители (Executors). Это ведомые рабочие процессы. Они запускаются на узлах кластера и выполняют задачи, которые назначил драйвер. Исполнители обрабатывают данные в своих разделах и хранят их в памяти или на диске, если включено кеширование.

Менеджер кластера (Cluster Manager). Отвечает за выделение ресурсов для приложения Spark. Платформа может работать с разными менеджерами кластеров:

  • Standalone — встроенный простой менеджер кластера Spark.
  • Apache YARN — менеджер ресурсов Hadoop.
  • Kubernetes® — система оркестрации контейнеров. Этот вариант становится всё более популярным для запуска Spark в облачных средах.

Абстракции данных: RDD, DataFrame и Dataset

Spark использует для работы с данными три ключевые абстракции: RDD, DataFrame и Dataset. Они различаются уровнем оптимизации и контролем типов данных.

RDD остаётся основой Spark, но современная разработка в основном использует DataFrame и Dataset. Эти абстракции предлагают более высокий уровень оптимизации и производительности, а также упрощают работу со структурированными данными.

RDD

Resilient Distributed Dataset, или RDD, — фундаментальная низкоуровневая абстракция Spark. Она представляет собой неизменяемую, то есть немодифицируемую, распределённую коллекцию данных. Эта коллекция разделена на части — партиции.

Главное преимущество RDD — отказоустойчивость. Её обеспечивает механизм отслеживания происхождения данных, известный как lineage.

Если какая-то партиция теряется, Spark её воссоздаёт. Для этого он повторяет всю цепочку преобразований с самого начала. Работа с RDD происходит через функциональный API. Он включает трансформации, такие как map и filter, и действия, например collect или count.

DataFrame

Следующий уровень абстракции — DataFrame. Это распределённая коллекция данных, которая структурирована в виде таблицы с именованными столбцами. Такой формат похож на таблицы в реляционных базах данных.

В отличие от RDD, DataFrame использует высокоуровневый API. Его оптимизирует движок Spark SQL Catalyst. Spark «понимает» структуру данных в DataFrame и может построить более производительный план выполнения запросов. В современных версиях платформы DataFrame является псевдонимом для нетипизированной коллекции Dataset[Row].

Dataset

Dataset объединяет преимущества RDD и DataFrame. Это строго типизированная коллекция объектов JVM — виртуальной машины Java, — которая доступна в Scala и Java. Абстракция сочетает безопасность типов, как у RDD, с производительностью и оптимизациями Spark SQL, как у DataFrame.

Такой подход позволяет находить ошибки типизации на этапе компиляции. Это значительно повышает надёжность кода.

Принципы вычислений в Spark: отложенная модель и DAG

Spark использует модель отложенных вычислений — lazy evaluation. Операции не выполняются мгновенно, они делятся на два типа: трансформации и действия. Такой подход позволяет платформе сначала построить оптимальный план для реализации команд:

  • Трансформации — это инструкции, которые преобразуют данные. Они не запускают сам процесс, а только формируют его логику. Spark выстраивает её в направленный ациклический граф — Directed Acyclic Graph (DAG), который служит планом будущих вычислений.
  • Реальные вычисления запускает только команда-действие. С этого момента Spark последовательно выполняет несколько шагов. Сначала оптимизатор Catalyst преобразует логический план графа в наиболее эффективный физический. Затем планировщик DAG разделяет граф на отдельные этапы вычислений. После этого он распределяет готовые задачи между исполнителями, которые физически запускают их на узлах кластера.

Ключевую роль в этом разделении на этапы играет перемешивание данных, которое необходимо для операций join и groupBy. Они требуют, чтобы потоки данных перераспределялись между узлами.

Перемешивание — ресурсоёмкая операция, поэтому она служит естественной границей между этапами вычислений. Именно такая модель отложенных вычислений позволяет Spark глубоко анализировать и оптимизировать процесс обработки данных ещё до его физического запуска.

Технические возможности Apache Spark и инструменты

Apache Spark — это платформа, которая состоит из ядра и нескольких библиотек верхнего уровня. Такая архитектура позволяет строить сложные приложения, комбинируя разные типы обработки данных в одной системе.

Основные компоненты Apache Spark

Spark Core

Предоставляет базовую функциональность: абстракцию RDD, управление памятью, планирование задач и восстановление после сбоев. Служит основой для всех остальных компонентов.

Spark SQL

Модуль для работы со структурированными данными через абстракции DataFrame и Dataset. Позволяет выполнять ANSI SQL-запросы, использует оптимизатор Catalyst и проект Tungsten для высокой производительности.

Structured Streaming

Высокоуровневый API для потоковой обработки данных в реальном времени. Использует движок Spark SQL и API DataFrame/Dataset, обеспечивая отказоустойчивость и семантику exactly-once, о которой мы говорили выше.

MLlib

Библиотека машинного обучения. Содержит распределённые реализации алгоритмов (классификация, регрессия и другие) и утилиты для построения ML-конвейеров, позволяя масштабировать обучение моделей.

GraphX

Компонент для графовых вычислений. Расширяет RDD, добавляя абстракцию графа и операторы для манипулирования графовыми структурами. Используется для анализа соцсетей или построения рекомендаций.

Apache Spark редко используют изолированно, обычно он часть современной экосистемы больших данных. Для построения полноценной платформы Spark интегрируют с различными системами хранения, управления кластером и форматами данных.

Системы хранения

Spark может работать с широким спектром систем хранения:

  • Hadoop Distributed File System (HDFS) — распределённая файловая система Hadoop. Исторически Spark часто разворачивали вместе с Hadoop и использовали HDFS в качестве основного хранилища.

  • Облачные объектные хранилища. В облачных средах стандартом стали объектные хранилища, например Yandex Object Storage. Они предлагают высокую масштабируемость, долговечность и экономическую эффективность. Такой подход позволяет отделить вычисления от хранения и независимо масштабировать кластеры Spark и само хранилище.

Менеджеры кластера

Spark использует менеджеры кластера для управления ресурсами и оркестрации задач:

  • Apache YARN. В экосистеме Hadoop YARN — стандартный менеджер ресурсов.

  • Kubernetes. В последние годы Kubernetes стал предпочтительной платформой для запуска Spark, особенно в облаках. Он предлагает лучшую изоляцию ресурсов и унифицированный подход к управлению рабочими нагрузками. Использование Spark в Kubernetes упрощает развёртывание и масштабирование приложений.

Форматы данных

Эффективность обработки данных в Spark сильно зависит от используемых форматов файлов.

Apache Parquet — колоночный (столбцовый) формат хранения данных. Он оптимизирован для аналитических запросов. Такой способ хранения позволяет считывать только нужные столбцы и обеспечивает эффективное сжатие данных.

Архитектура Lakehouse и табличные форматы

Архитектура Lakehouse объединяет преимущества хранилищ и озёр данных. Она позволяет выполнять SQL-запросы и транзакции поверх данных, которые хранятся в озере. Для реализации этой архитектуры применяют специальные табличные форматы:

  • Delta Lake — фреймворк хранения с открытым исходным кодом, который обеспечивает ACID-транзакции, масштабируемую обработку метаданных и унификацию пакетной и потоковой обработки. Работает поверх существующих озёр данных и тесно интегрирован со Spark.

  • Apache Iceberg — открытый формат таблиц для очень больших аналитических наборов данных. Поддерживает ACID-транзакции, эволюцию схемы и «путешествие во времени» — доступ к предыдущим версиям данных.

Spark в архитектуре Lakehouse: роль и ценность

Lakehouse — это подход, при котором данные хранятся в масштабируемом объектном хранилище (озере данных, Data Lake), но доступны как управляемые таблицы с транзакциями и схемой (как в хранилище данных, Data Warehouse). На практике Lakehouse обычно состоит из трёх уровней:

  • Хранилище: объектное хранилище, где лежат файлы (часто Parquet).
  • Табличный слой: форматы таблиц вроде Apache Iceberg или Delta Lake, которые добавляют ACID-транзакции, эволюцию схемы и версионирование.
  • Вычислительный слой: движок, который читает или пишет эти таблицы и выполняет преобразования.

Apache Spark часто становится вычислительным слоем Lakehouse, потому что он закрывает сразу несколько задач одним стеком:

  • ELT для «бронзы — серебра — золота» (medallion architecture): очистка сырых данных → нормализация → витрины и датасеты для бизнес-аналитики или машинного обучения.
  • Единый API для пакетной и потоковой обработки: можно обрабатывать исторические данные и поток (Structured Streaming) и писать результат в те же Lakehouse-таблицы.
  • SQL-аналитика поверх озера: Spark SQL помогает строить витрины и делать ad-hoc-анализ по данным в табличном формате.
  • Разделение хранения и вычислений: данные живут в объектном хранилище, а кластеры Spark масштабируются независимо под ETL, поток, машинное обучение или аналитические запросы.

Сравнение Spark с другими фреймворками

Apache Spark занимает доминирующее положение в обработке больших данных, но существуют и альтернативы:

Фреймворк

Основное назначение

Ключевые отличия от Spark

Типичный пользователь или сценарий

Hadoop MapReduce

Пакетная обработка больших данных (предшественник Spark)

Производительность: Spark до 10–20 раз быстрее за счёт обработки в памяти

Универсальность: MapReduce выполняет только пакетную обработку. Spark объединяет пакетную и потоковую обработки, SQL и ML

Исторические системы. Spark — де-факто современный стандарт

Apache Flink®

Потоковая обработка данных с низкой задержкой

Модель: Flink® — настоящий потоковый движок (обработка по событию). Spark использует микропакеты

Задержка: Flink обеспечивает задержку в десятки миллисекунд — ниже, чем у Spark

Приложения, требующие реакции в реальном времени: финансовый мониторинг, обнаружение мошенничества и т. д.

Dask

Параллельные вычисления для масштабирования экосистемы Python (pandas, NumPy)

Интеграция: Dask нативно расширяет библиотеки Python. Spark — движок на базе JVM со своим API

Производительность: Spark обычно быстрее для SQL и ETL. Dask лучше для сложных нестандартных вычислений на Python

Датасаентисты в Python, которые хотят масштабировать существующий код

Выбор фреймворка зависит от конкретных задач и требований к задержке.

Apache Spark в Yandex Cloud

Управление кластерами Apache Spark — сложный процесс. Он требует настройки, мониторинга и масштабирования инфраструктуры. Мы предлагаем управляемые сервисы, чтобы упростить эту задачу.

Yandex Data Processing и Yandex Managed Service for Apache Spark: как выбрать

Оба варианта позволяют запускать задания Apache Spark в облаке, но отличаются фокусом.

Критерий

Yandex Data Processing

Yandex Managed Service for Apache Spark

Основной фокус

Экосистема Hadoop + Spark в одном управляемом кластере

Специализированный управляемый кластер Spark

Когда подходит лучше всего

Нужны компоненты Hadoop-стека рядом со Spark (например, HDFS/YARN/Hive) или уже есть процессы под Hadoop

Нужен Spark как основной compute-движок для ETL, Streaming, SQL или ML, в том числе для Lakehouse-подхода

Типовые сценарии

Наследуемые Hadoop-пайплайны, миграции с on-premises Hadoop, задачи, завязанные на сервисах экосистемы

Современные пайплайны Spark, витрины на объектном хранилище, обработка потоков, подготовка датасетов для машинного обучения

Хранение данных (типовая схема)

HDFS и/или объектное хранилище

Объектное хранилище + табличный формат (Iceberg или Delta) как основа Lakehouse

Результат для команды

Удобно, если нужен именно «комбайн» Hadoop + Spark

Удобно, если нужен быстрый старт и масштабирование именно Spark-задач

Практическое правило выбора:

  • Если у вас уже есть или нужен Hadoop-стек целиком, чаще выбирают Yandex Data Processing.

  • Если вы строите современную платформу данных или Lakehouse и Spark — основной вычислительный слой, чаще выбирают Yandex Managed Service for Apache Spark.

Ключевые преимущества управляемых сервисов

  • Быстрое развёртывание. Можно быстро создать готовый к работе кластер Spark нужной конфигурации.
  • Гибкая настройка под нагрузки. Пакетная трансформация, потоковая обработка, машинное обучение, аналитические запросы.
  • Масштабирование ресурсов. Возможность адаптироваться под рост или падение нагрузки и оптимизировать затраты.
  • Простое администрирование. Инструменты мониторинга и логирования снижают долю рутины.

Наши управляемые сервисы позволяют сосредоточиться на решении бизнес-задач и анализе данных. Управление инфраструктурой Spark при этом мы берём на себя.

Выводы и рекомендации

Apache Spark — универсальный движок для больших данных: он закрывает ETL, потоковую обработку, SQL-аналитику и подготовку данных для машинного обучения в едином стеке.

Что важно учитывать при внедрении:

  • В большинстве задач оптимальный уровень — DataFrame или Spark SQL. RDD остаётся для специальных случаев.
  • Производительность часто упирается в shuffle, join и партиционирование — это ключевые точки оптимизации.
  • Для платформы данных всё чаще выбирают Lakehouse: объектное хранилище + Iceberg или Delta + Spark как compute-слой.

С чего начать:

  1. Определите сценарий (пакетный ETL, потоковая обработка, ad-hoc SQL, подготовка датасетов для машинного обучения).
  2. Выберите управляемый сервис под ваш контекст: Hadoop-экосистема (Yandex Data Processing) или специализированный Spark (Yandex Managed Service for Apache Spark).
  3. Для Lakehouse заложите основу: хранение в объектном хранилище, табличный формат и конвейер «бронза — серебро — золото».
Apache Spark™: как устроен популярный инструмент для работы с большими данными
Войдите, чтобы сохранить пост