Открыть сервисСервис

Apache Spark — распределённая платформа обработки данных

Apache Spark — это открытая распределённая платформа для обработки больших данных, написанная на языках Scala и Java и работающая поверх кластера Hadoop. Она предоставляет унифицированный движок для пакетной и потоковой обработки данных, поддерживает языки программирования Scala, Java, Python (PySpark) и R (SparkR), а также высокоуровневые API для SQL, машинного обучения и графовых вычислений. Проект развивается под эгидой фонда Apache Software Foundation и является одним из самых широко используемых инструментов в области больших данных.

История

Разработка Spark началась в 2009 году в лаборатории AMPLab Калифорнийского университета в Беркли под руководством Матеи Захарии. Первая версия была опубликована в 2010 году, а в 2013 году проект был передан в Apache Software Foundation, где в 2014 году получил статус верхнеуровневого проекта (Apache Top-Level Project).

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

Устройство и основные компоненты

Архитектура Spark строится вокруг центрального процесса — драйвера (driver), который координирует выполнение приложения, и набора исполнителей (executors), работающих на узлах кластера. Драйвер разбивает задачу на стадии (stages) и задания (tasks), которые распределяются по исполнителям.

RDD и DataFrame

Базовой абстракцией Spark является Resilient Distributed Dataset (RDD) — устойчивый распределённый набор данных, представляющий собой неизменяемое коллекцию объектов, распределённое по узлам кластера. RDD поддерживают два типа операций: преобразования (transformations), создающие новый RDD из существующего, и действия (actions), запускающие вычисления и возвращающие результат.

Помимо RDD, Spark предоставляет более высокоуровневые структуры данных:

  • DataFrame — таблица с именованными столбцами, оптимизированная под SQL-подобные запросы;
  • Dataset — типизированная версия DataFrame, сочетающая преимущества RDD и DataFrame.

Подсистемы

В состав экосистемы Spark входят несколько модулей:

МодульНазначение
Spark SQLобработка структурированных данных и выполнение SQL-запросов
Spark Streaming / Structured Streamingпотоковая обработка данных в реальном времени
MLlibбиблиотека алгоритмов машинного обучения
GraphXвычисления на графах
Spark Coreядро платформы, реализующее RDD и базовые механизмы

Принцип работы

Spark использует ленивое (отложенное) выполнение вычислений. Преобразования RDD не выполняются сразу — они лишь записываются в план вычислений. Вычисления запускаются только при вызове действия, что позволяет оптимизировать DAG (ориентированный ациклический граф) вычислений и объединять мелкие операции.

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

Применение

Apache Spark применяется в широком спектре задач:

  • Аналитика данных — обработка логов, телеметрии, данных веб-аналитики;
  • Машинное обучение — обучение моделей на больших объёмах данных с использованием MLlib или интеграции с внешними фреймворками (TensorFlow, scikit-learn);
  • Потоковая аналитика — обработка событий в реальном времени с использованием Structured Streaming;
  • Интеграция с хранилищами — чтение и запись данных в HDFS, S3, Cassandra, Kafka, Elasticsearch и другие системы.

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

Альтернативы

Основными конкурентами Spark являются:

  • Apache Flink — платформа потоковой обработки с поддержкой пакетных вычислений;
  • Hadoop MapReduce — классическая модель пакетной обработки;
  • Dask — библиотека Python для параллельных вычислений;
  • Ray — платформа для распределённых вычислений и машинного обучения.

Интересные факты

  • Spark был создан как исследовательский проект в университете, а не как коммерческий продукт.
  • Одной из причин быстрого распространения Spark стало то, что он был разработан как замена MapReduce, а не как отдельная система — это упростило миграцию существующих Hadoop-приложений.
  • В 2014 году Spark был признан одним из самых активно развивающихся проектов Apache Software Foundation.

Источники

  • Zaharia M. et al. Apache Spark: A Unified Engine for Big Data Processing // Communications of the ACM. — 2016.
  • Karau H., Konwinski A., Wendell P., Zaharia M. Learning Spark. — O'Reilly Media, 2015.
  • Документация Apache Spark: spark.apache.org
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru