Обзор быстрого фреймворка для работы с big data.
Работа с большими данными требует соответствующих инструментов — обычный компьютер просто не справится с обработкой терабайтов информации. Одним из таких инструментов является платформа Hadoop, которая обеспечивает распределённый анализ данных в кластерах из сотен и тысяч компьютеров.
Важная часть Hadoop — фреймворк Apache Spark. Он позволяет проводить обработку данных в режиме реального времени в отдельных кластерах, распределяя между ними задачи и обрабатывая результаты.
Из этой статьи вы узнаете:
Что такое Apache Spark
Apache Spark — это фреймворк для обработки и анализа больших объёмов информации, входящий в инфраструктуру Hadoop. Он позволяет быстро выполнять операции с данными в вычислительных кластерах и поддерживает такие языки программирования, как Scala, Java, Python, R и SQL.
Spark ускоряет обработку больших данных, распределяя вычисления между сотнями и тысячами машин, объединённых в кластеры. Это не новая технология — за несколько лет до появления Spark в Hadoop с аналогичной целью использовался MapReduce.
Подход 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» Холдена Карау и других авторов;
- «Spark для профессионалов: современные паттерны обработки больших данных» Сэнди Ризы и других авторов;
- «Эффективный Spark. Масштабирование и оптимизация» Холдена Карау и Рейчел Уоррен.
Внутренний формат Apache Spark, представляющий собой данные, распределённые по отдельным вычислительным узлам кластера.
SVD++ (Singular value decomposition++) — алгоритм матричной факторизации, лежащий в основе современных рекомендательных систем.