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
