Что такое Apache Spark
Apache Spark – это Big Data фреймворк с открытым исходным кодом для распределённой пакетной и потоковой обработки неструктурированных и слабоструктурированных данных, входящий в экосистему проектов Hadoop.
ИСТОРИЯ ПОЯВЛЕНИЯ СПАРК И СРАВНЕНИЕ С APACHE HADOOP
Основным автором Apache Spark считается Матей Захария (Matei Zaharia), румынско-канадский учёный в области информатики. Он начал работу над проектом в 2009 году, будучи аспирантом Университета Калифорнии в Беркли. В 2010 году проект опубликован под лицензией BSD, в 2013 году передан фонду Apache Software Foundation и переведён на лицензию Apache 2.0, а в 2014 году принят в число проектов верхнего уровня Apache. Изначально Спарк написан на Scala, затем была добавлена существенная часть кода на Java, что позволяет разрабатывать распределенные приложения непосредственно на этом языке программирования.
Классический MapReduce, Apache компонент Hadoop для обработки данных, проводит вычисления в два этапа:
- Map, когда главный узел кластера (master) распределяет задачи по рабочим узлам (node)$
- Reduce, когда данные сворачиваются и передаются обратно на главный узел, формируя окончательный результат вычислений.
Пока все процессы этапа Map не закончатся, процессы Reduce не начнутся. При этом все операции проходят по циклу чтение-запись с жесткого диска. Это обусловливает задержки в обработке информации. Таким образом, технология MapReduce хорошо подходит для задач распределенных вычислений в пакетном режиме, но из-за задержек (latency) не может использоваться для потоковой обработки в режиме реального времени. Для решения этой проблемы был создан Apache Spark и другие Big Data фреймворки распределенной потоковой обработки (Storm, Samza, Flink).
В отличие от классического обработчика ядра Apache Hadoop c двухуровневой концепцией MapReduce на базе дискового хранилища, Spark использует специализированные примитивы для рекуррентной обработки в оперативной памяти. Благодаря этому многие вычислительные задачи реализуются в Спарк значительно быстрее. Например, возможность многократного доступа к загруженным в память пользовательским данным позволяет эффективно работать с алгоритмами машинного обучения (Machine Learning).
Сравнение Apache Hadoop и Spark
КАК УСТРОЕН APACHE SPARK: АРХИТЕКТУРА И ПРИНЦИП РАБОТЫ
Спарк состоит из следующих компонентов:
- Ядро (Core);
- SQL – инструмент для аналитической обработки данных с помощью SQL-запросов;
- Streaming – надстройка для обработки потоковых данных, о которой подробно мы рассказывали здесь и здесь;
- MLlib – набор библиотек машинного обучения;
- GraphX – модуль распределённой обработки графов.
Spark может работать как в среде кластера Hadoop под управлением YARN, так и без компонентов ядра хадуп, например, на базе системы управления кластером Mesos. Спарк поддерживает несколько популярных распределённых систем хранения данных (HDFS, OpenStack Swift, Cassandra, Amazon S3) и языков программирования (Java, Scala, Python, R), предоставляя для них API-интерфейсы.
Компоненты Спарк
Справедливости ради стоит отметить, что Spark Streaming, в отличие от, например, Apache Storm, Flink или Samza, не обрабатывает потоки Big Data целиком. Вместо этого реализуется микропакетный подход (micro-batch), когда поток данных разбивается на небольшие пакеты временных интервалов. Абстракция Spark для потока называется DStream (discretized stream, дискретизированный поток) и представляет собой микро-пакет, содержащий несколько отказоустойчивых распределенных датасетов, RDD (resilient distributed dataset).
Именно RDD является основным вычислительным примитивом Спарк, над которым можно делать параллельные вычисления и преобразования с помощью встроенных и произвольных функций, в том числе с помощью временных окон (window-based operations). Подробнее про временные окна мы рассказывали здесь на примере Apache Kafka Streams.
Принцип работы Спарк
ГДЕ И КАК ИСПОЛЬЗУЕТСЯ APACHE SPARK
Благодаря наличию разнопрофильных инструментов для аналитической обработки данных «на лету» (SQL, Streaming, MLLib, GraphX), Спарк активно используется в системах интернета вещей (Internet of Things, IoT) на стороне IoT-платформ, а также в различных бизнес-приложениях, в т.ч. на базе методов Machine Learning. Например, Спарк применяется для прогнозирования оттока клиентов (Churn Predict) и оценки финансовых рисков. Однако, если временная задержка обработки данных (latency) – это критичный фактор, Apache Spark не подойдет и стоит рассмотреть альтернативу в виде клиентской библиотеки Kafka Streams или фреймворков Storm, Flink, Samza.
По набору компонентов и функциональным возможностям Spark можно сравнить с другим Big Data инструментом распределенной потоковой обработки – Apache Flink.
Автор Анна Вичугова