В работе с Big Data используется много разных инструментов. Даже для одних и тех же задач существует несколько технологий, у каждой из которых свои особенности и недостатки. Может быть сложно разобраться во всем этом многообразии и что-то выбрать.

Чтобы помочь в этом, мы расскажем об одном из инструментов — Apache Spark. Вы узнаете, что это такое, как он используется при работе с большими данными и чем он может помочь. Также мы сравним его с другой похожей технологией — Hadoop MapReduce.

Что такое Apache Spark

Apache Spark — это платформа, которая используется в Big Data для кластерных вычислений и крупномасштабной обработки данных. Spark обрабатывает данные в оперативной памяти и редко обращается к диску, поэтому работает очень быстро.

Apache Spark полностью совместим с экосистемой Hadoop и легко встраивается в существующие решения. У него нет собственного хранилища данных, и он может работать с различными источниками: HDFS, Hive, S3, HBase, Cassandra и другими. Поддерживает несколько языков программирования: Scala, Python, Java, R, SQL.

Spark используется для обработки данных, например фильтрации, сортировки, очистки, валидации и так далее. Его место в процессе работы с большими данными изображено ниже на схеме:

Spark состоит из нескольких компонентов.

  1. Apache Spark Core

    Это базовый движок для обработки данных, который лежит в основе всей платформы. Ядро взаимодействует с системами хранения, управляет памятью, планирует и распределяет нагрузку в кластере. Также оно отвечает за поддержку API языков программирования.

  2. Spark SQL

    Этот модуль служит для упрощения работы со структурированными данными и позволяет выполнять запросы на языке SQL. Главная его задача состоит в том, чтобы дата-инженеры не задумывались о распределенной природе хранения данных, а сосредоточились на сценариях их использования.

  3. Streaming

    Обеспечивает масштабируемую, высокопроизводительную и отказоустойчивую потоковую обработку данных в реальном времени. В качестве источников данных для Spark могут выступать Kafka, Flume, Kinesis и другие системы.

  4. MLlib

    Это масштабируемая библиотека машинного обучения низкого уровня. В библиотеке реализованы различные алгоритмы машинного обучения, например кластеризация, регрессия, классификация и коллаборативная фильтрация.

  5. GraphX

    Служит для манипуляций над графами и их параллельной обработки. GraphX может измерять связность графов, распределение степеней, среднюю длину пути и другие показатели. Он также может соединять графы и быстро их преобразовывать. Кроме встроенных операций над графами, в GraphX также есть библиотека с реализацией алгоритма PageRank.

Компоненты Apache Spark

Сравнение Apache Spark и Apache MapReduce

Раньше для обработки больших данных, как правило, использовался MapReduce. Это компонент Hadoop, который положил начало обработке данных в Big Data. Но у него есть две глобальные проблемы.

  • Низкая производительность. MapReduce проводит вычисления в два этапа. Сначала он делит данные на части и передает их на узлы кластера для обработки. Затем каждый узел обрабатывает данные и отправляет результат на главный узел, где формируется финальный результат вычислений. MapReduce постоянно обращается к диску, там он хранит все промежуточные и финальные результаты вычислений. Поэтому он работает с задержками, которые не позволяют использовать MapReduce для обработки потоковых данных и задач машинного обучения.
  • Высокая сложность. Чтобы написать хорошее решение на MapReduce, требуется высокий уровень экспертности. Даже опытный специалист может легко допустить ошибку или написать неэффективный алгоритм.

Но в 2014 году начал завоевывать популярность другой инструмент — Spark, и сейчас он практически вытеснил MapReduce. Apache Spark разрабатывался для устранения недостатков MapReduce, но с сохранением его преимуществ. Вот как он решает проблемы MapReduce:

  • Spark обрабатывает данные в памяти и практически не обращается к диску. Если же объем обрабатываемых данных больше, чем объем RAM, Spark сбрасывает часть данных на диск. При этом в него встроено множество оптимизаторов, которые позволяют сократить число обращений к диску. Поэтому Spark быстрее MapReduce в десятки, иногда в сотни раз.
  • В Spark есть API для разных языков программирования, поэтому писать код намного проще и сам код получается компактнее. Обычно разработчики пишут на Spark довольно высокоуровневые инструкции, а он сам решает, как выполнить их оптимальнее. Зачастую он может это сделать лучше, чем человек.

    Например, Junior Data-engineer может написать код на Spark, который будет работать быстрее, чем код, написанный Senior Data-engineer на MapReduce. Также на Spark меньше шансов сделать серьезную ошибку, а если она все-таки будет, то ее легче исправить.

Подводя краткий итог сравнения, можно сказать, что Hadoop MapReduce — устаревающая технология, а Apache Spark практически стал стандартом в области больших данных.

Как облака могут усилить Apache Spark

Для обработки данных в Big Data очень важна горизонтальная масштабируемость. Чем больше узлов в кластере, тем быстрее обрабатываются данные. И Spark не исключение. Строить кластеры для обработки данных на своем оборудовании сложно и невыгодно. Заранее тяжело угадать, сколько нужно серверов и какой они должны быть мощности. Если использовать слишком много серверов, они будут простаивать. Если слишком мало, то обработка данных будет занимать много времени. Поэтому стоит обратить внимание на облачные технологии.

Облачные платформы могут предоставить огромное количество ресурсов по требованию. Если у вас небольшая нагрузка — подключаете несколько небольших узлов. Когда нагрузка возрастет, можно быстро добавить новые узлы в кластер. Это позволит использовать ресурсы эффективнее.

Кроме того, облачные платформы предоставляют и другие инструменты для работы с большими данными. Например, на платформе Mail.ru Cloud Solutions есть разные инструменты для работы с Big Data: Spark, Hadoop, Kafka, Storm. Эти инструменты предоставляются «как сервис», то есть их не нужно устанавливать и поддерживать, этим занимается облачный провайдер.

Кроме очевидных инструментов для работы с большими данными, облачные платформы предоставляют и другие полезные технологии. Например, Apache Spark можно развернуть в Kubernetes, чтобы получить больше гибкости и решить несколько проблем классического Hadoop-кластера — вроде изоляции сред или разделения Storage- и Compute-слоев. Подробнее об этом мы писали в отдельной статье.

Заключение

  • Apache Spark — фреймворк для обработки данных в Big Data. Он работает в оперативной памяти и редко обращается к диску, поэтому обрабатывает данные очень быстро.
  • Раньше стандартом де-факто для обработки данных был Hadoop MapReduce. Но у него есть две ключевые проблемы: низкая производительность и высокая сложность разработки.
  • Сейчас стандартом практически стал Spark. Он создавался, чтобы устранить недостатки MapReduce и сохранить его преимущества.
  • Apache Spark и другие технологии для работы с большими данными активно используются в облаках, потому что позволяют получить все преимущества облачных сервисов.