Что такое Apache Spark и как он устроен
Обзор быстрого фреймворка для работы с big data.
Иллюстрация: Оля Ежак для Skillbox Media
Работа с большими данными требует соответствующих инструментов — обычный компьютер просто не справится с обработкой терабайтов информации. Одним из таких инструментов является платформа Hadoop, которая обеспечивает распределённый анализ данных в кластерах из сотен и тысяч компьютеров.
Важная часть Hadoop — фреймворк Apache Spark. Он позволяет проводить обработку данных в режиме реального времени в отдельных кластерах, распределяя между ними задачи и обрабатывая результаты.
Из этой статьи вы узнаете:
- что это такое Apache Spark;
- как он появился;
- из чего состоит Apache Spark;
- что такое Spark-приложение;
- что читать дальше.
Что такое Apache Spark
Apache Spark — это фреймворк для обработки и анализа больших объёмов информации, входящий в инфраструктуру Hadoop. Он позволяет быстро выполнять операции с данными в вычислительных кластерах и поддерживает такие языки программирования, как Scala, Java, Python, R и SQL.
Читайте также:
Spark ускоряет обработку больших данных, распределяя вычисления между сотнями и тысячами машин, объединённых в кластеры. Это не новая технология — за несколько лет до появления Spark в Hadoop с аналогичной целью использовался MapReduce.
Подход Spark выгодно отличается от классической парадигмы MapReduce и позволяет добиться большей скорости обработки данных. Это стало возможным благодаря ряду особенностей фреймворка.
Обработка в памяти (in-memory processing). Spark хранит и обрабатывает данные в оперативной памяти. Такой подход обеспечивает гораздо большую скорость, чем загрузка и чтение данных с диска, как в MapReduce.
Ленивые вычисления. Spark использует концепцию отложенного выполнения вычислений. Это означает, что операции над данными проводятся только перед непосредственным использованием результатов этих операций. Благодаря этому вычислительные мощности не тратятся на вычисления, которые понадобятся когда-то в будущем.
Resilient distributed datasets (RDD). Эта структура хранит датасеты и информацию о выполненных преобразованиях сразу на нескольких узлах кластерной сети. RDD позволяет Spark восстановить данные в случае сбоя и оптимизировать вычисления.
Параллельная обработка и комбинирование операций. Spark распределяет данные и вычисления по нескольким узлам в кластере, выполняя разные операции обработки параллельно в режиме реального времени. Это отличает его от MapReduce, при использовании которого каждый следующий этап работы с датасетом требует завершения предыдущего.
Благодаря этим особенностям Spark имеет в десятки раз большую скорость работы с данными, чем MapReduce.
История появления Spark
В 2005 году Дуг Каттинг начал работать над программной инфраструктурой для распределённых вычислений в проекте Nutch. Это была поисковая машина на Java. В Nutch впервые использовали вычислительную концепцию MapReduce: именно она станет основой Hadoop и золотым стандартом распределённых вычислений.
Однако пользователи Hadoop столкнулись с проблемой — классическая MapReduce всегда выполняет процессы последовательно: сначала разделяет данные на кластеры, обрабатывает их и затем собирает информацию обратно. Это замедляет работу, так как обработка данных не может идти параллельно на отдельных этапах при сборе информации в режиме реального времени.
В 2009 году Матей Захария, аспирант Университета Калифорнии в Беркли, начал разрабатывать на Scala новый инструмент — Spark. В 2013 году права на проект были переданы фонду Apache Software Foundation, а в 2014 году его сделали одним из приоритетных проектов Apache. Именно Spark решил главную проблему MapReduce и позволил обрабатывать данные в режиме реального времени, не дожидаясь завершения каждого этапа анализа.
Из чего состоит Apache Spark
Apache Spark состоит из нескольких модулей:
- Spark Core;
- Spark SQL;
- Spark Streaming;
- MLlib;
- GraphX.
Также фреймворк предоставляет API для работы с языками Python, Java и R. Таким образом, Spark поддерживает четыре языка программирования, включая родной Scala, на котором он написан, и SQL-подобный язык запросов. Рассмотрим каждый модуль подробнее.
Spark Core
Core-модуль обеспечивает основные функциональные возможности фреймворка: управление задачами, распределение данных, планирование и выполнение операций в кластере. Именно Spark Core позволяет работать с данными в оперативной памяти: он предоставляет для этого специальное API и обеспечивает высокую скорость обработки.
Spark SQL
Модуль для работы со структурированными данными, который поддерживает SQL-подобный язык запросов. Он позволяет использовать типичные для реляционных баз данных операции на распределённых данных.
Spark Streaming
Модуль Streaming содержит методы для обработки данных в реальном времени. Он отбирает отдельные блоки из общего потока данных, переводит их в форму мультимножества и передаёт в другие модули Spark.
GraphX
Библиотека содержит объекты и методы, которые упрощают обход и анализ графовых структур. Кроме того, в GraphX есть готовый набор алгоритмов для решения типовых задач графовой аналитики: ранжирования страниц, SVD++, подсчёта треугольников, обнаружения сообществ и так далее.
MLlib
Эта библиотека для машинного обучения включает в себя различные алгоритмы классификации, регрессии, кластеризации данных и так далее.
Из чего состоит Spark-приложение
В основе любого Spark-приложения лежат две сущности:
- управляющий процесс — драйвер (driver);
- набор распределённых рабочих процессов — исполнителей (executors).
Драйвер необходим для запуска заданий на конкретном узле кластера и управления их выполнением. Кроме того, он контролирует работу распределённых узлов и отвечает за их ответы на ввод со стороны пользователя.
Исполнители — это распределённые процессы, отвечающие за непосредственное выполнение задач и их хранение в памяти.
Рабочий процесс в Apache Spark устроен просто:
- У любой распределённой системы есть менеджер кластеров (cluster manager), контролирующий распределение ресурсов между исполнителями.
- При запуске Spark-приложения драйвер запрашивает у менеджера кластеров ресурсы для запуска исполнителей.
- Если ресурсы есть, менеджер кластеров запускает исполнители.
- Драйвер отправляет доступным исполнителям свои задачи.
- Исполнители проводят необходимые вычисления и отправляют результат драйверу.
- После завершения всех вычислений исполнители закрываются, их ресурсы возвращаются в общий кластер. Теперь распределённая система может работать над другими задачами.
Где используется Apache Spark
Spark применяют в работе с большими данными и машинным обучением специалисты разного профиля: аналитики данных, дата-сайентисты и дата-инженеры. Области использования разнообразны. Приведём несколько примеров.
В онлайн-торговле Spark используют для обработки информации о заказах и действиях пользователей в режиме реального времени. Например, такие данные можно кластеризовать и фильтровать, создавая персонализированные рекомендации для пользователей в момент их нахождения в интернет-магазине.
В финансовой сфере — Spark может использоваться для обеспечения безопасности клиентов: обнаружения подозрительных операций с помощью анализа большого объёма данных о местоположении и IP-адресе устройства, суммах средств и так далее.
В здравоохранении — для прогнозирования и составления рекомендаций по обследованию и лечению пациентов. Работа со Spark позволяет учитывать при их составлении большой объём данных — от результатов последних анализов человека до возможностей оказания медицинской помощи в конкретном лечебном учреждении.
Что дальше
Начать работать со Spark можно после изучения его документации. А тем, кто хочет погрузиться в работу с инструментом глубже, помогут книги:
- «Изучаем Spark» Холдена Карау и других авторов;
- «Spark для профессионалов: современные паттерны обработки больших данных» Сэнди Ризы и других авторов;
- «Эффективный Spark. Масштабирование и оптимизация» Холдена Карау и Рейчел Уоррен.
Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!