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

Apache Spark

Apache Spark — это универсальная платформа с открытым исходным кодом для распределённой обработки больших объёмов данных, реализующая концепцию кластерных вычислений в оперативной памяти (in-memory computing). Разработана в 2009 году в лаборатории AMPLab Калифорнийского университета в Беркли, с 2010 года распространяется под лицензией Apache 2.0. Spark обеспечивает высокую скорость обработки данных за счёт минимизации операций ввода-вывода на диск и использования устойчивых распределённых наборов данных (RDD). Поддерживает языки программирования Java, Scala, Python, R и SQL, а также предоставляет библиотеки для машинного обучения (MLlib), графового анализа (GraphX), потоковой обработки (Structured Streaming) и работы с SQL-запросами (Spark SQL).

История

Разработка Apache Spark началась в 2009 году под руководством Матея Захарии (Matei Zaharia) в рамках исследовательского проекта AMPLab (Algorithms, Machines, and People Lab) Калифорнийского университета в Беркли. Первоначально проект был ориентирован на создание альтернативы Hadoop MapReduce, способной эффективно обрабатывать итеративные алгоритмы машинного обучения и интерактивные запросы. В 2010 году Spark был опубликован под лицензией BSD, а в 2013 году передан в инкубатор Apache Software Foundation. В феврале 2014 года Spark стал проектом верхнего уровня Apache.

Ключевым фактором распространения Spark стало появление в версии 1.0 (2014 год) модуля Spark SQL, позволившего выполнять SQL-запросы поверх RDD, и API для потоковой обработки (Spark Streaming). Версия 2.0 (2016 год) представила Structured Streaming и унифицированный API на основе Dataset/DataFrame, упростивший разработку приложений. В 2018 году вышел Spark 2.4 с поддержкой Kubernetes как менеджера ресурсов и улучшенным взаимодействием с Apache Arrow. Версия 3.0 (2020 год) добавила поддержку адаптивного выполнения запросов (Adaptive Query Execution), динамического управления разделами и улучшенную интеграцию с Python (PySpark). Актуальная стабильная версия на 2025 год — 3.5.x, выпущенная в сентябре 2023 года.

Архитектура

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

Apache Spark построен на архитектуре «ведущий-ведомый» (master-slave). Кластер состоит из следующих элементов:

Устойчивые распределённые наборы данных (RDD)

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

RDD поддерживают два типа операций: трансформации (преобразования одного RDD в другой) и действия (возврат результата Driver’у или запись во внешнее хранилище). Примеры трансформаций: map, filter, flatMap, union, join, groupByKey. Примеры действий: reduce, collect, count, take, foreach.

DataFrame и Dataset

В версии 2.0 Spark ввёл более высокоуровневые абстракции — DataFrame и Dataset, построенные поверх RDD.

DataFrame и Dataset используют Catalyst Optimizer — оптимизатор запросов, который преобразует логический план выполнения в физический, применяя такие оптимизации, как проталкивание предикатов, устранение общих подвыражений и выбор эффективного алгоритма соединения.

Основные компоненты экосистемы

Spark SQL

Модуль Spark SQL позволяет выполнять SQL-запросы к структурированным данным, а также читать и записывать данные в форматах Parquet, ORC, Avro, JSON, CSV и JDBC. Включает в себя:

MLlib

MLlib — библиотека машинного обучения, включающая алгоритмы классификации (логистическая регрессия, случайный лес, градиентный бустинг), регрессии (линейная регрессия, регрессия на основе деревьев), кластеризации (k-средних, DBSCAN), рекомендаций (ALS), а также инструменты для предобработки данных (нормализация, векторизация, разбиение на тренировочную и тестовую выборки). MLlib поддерживает конвейеры (Pipeline), позволяющие объединять несколько этапов обработки в единый workflow.

Structured Streaming

Structured Streaming — модуль для потоковой обработки данных в реальном времени. Обрабатывает данные как непрерывный поток, разбиваемый на микро-батчи (micro-batch processing). Поддерживает оконные операции, агрегации, соединения потоков и статических таблиц, а также гарантии exactly-once (каждое событие обрабатывается ровно один раз). Источниками данных могут быть Kafka, Kinesis, файловые системы (HDFS, S3), сокеты и очереди сообщений.

GraphX

GraphX — библиотека для графового анализа, основанная на RDD. Предоставляет API для построения ориентированных и неориентированных графов, выполнения алгоритмов (PageRank, поиск кратчайшего пути, связные компоненты, кластеризация треугольников) и визуализации. GraphX использует оптимизированные структуры данных для хранения рёбер и вершин.

Режимы работы

Apache Spark может работать в трёх основных режимах:

Производительность и оптимизация

Ключевое преимущество Spark перед Hadoop MapReduce — скорость обработки. За счёт хранения промежуточных данных в оперативной памяти Spark выполняет итеративные алгоритмы (например, машинное обучение) в 10–100 раз быстрее, чем MapReduce, записывающий данные на диск после каждой операции. Для операций, не помещающихся в память, Spark автоматически сбрасывает данные на диск (spill).

Основные методы оптимизации:

Применение

Apache Spark широко используется в различных отраслях для обработки больших данных:

Критика и ограничения

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

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

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →