В продолжение нашего разговора об инструментах работы специалиста по большим данным мы расскажем об Apache Spark: рассмотрим основные принципы работы фреймворка, его архитектуру, главные характеристики и причины, по которым это средство непременно стоит включить в инструментарий big data-специалиста.
Что такое Spark?
Когда исследователи университета Беркли начинали разрабатывать Spark, они держали в голове уже сложившуюся к тому времени картину мира больших данных – принцип параллельных вычислений на кластере компьютеров, способном к расширению в ширину, позволял работать с большими объемами информации, но жертвовал скоростью работы в пользу горизонтальной масштабируемости и способности к быстрому восстановлению после системных ошибок. Здесь стоит вспомнить о нашумевшей (и до сих пор популярной) технологии MapReduce, которая примерно до февраля этого года была основной движущей силой экосистемы Apache Hadoop. Действительно эффективная для пакетной обработки данных, эта модель, однако, обладает существенными недостатками.
- Во-первых, в угоду повышения отказоустойчивости, MapReduce предполагает хранение данных на жестких дисках – а это непременно означает снижение скорости обработки информации.
- Во-вторых, MapReduce относится к классу однопроходных моделей вычисления, что делает ее не слишком пригодной, например, для итерационных вычислений и интерактивного анализа данных.
Все это имели в виду разработчики Spark – и их продукт на выходе получился настолько удачным и перспективным, что на данный момент именно это средство является одновременно флагманом фонда Apache и его главным козырем в рукаве.
Строго говоря, Apache Spark – это высокопроизводительное средство обработки данных, работающее в кластере Hadoop – и призванное заменить (или дополнить – зависит от точки зрения) технологию MapReduce, путем обобщения и модификации использованных для ее функционирования технологий. Ключевых момента здесь два:
- Повышение скорости обработки данных (до 100 раз по сравнению с MapReduce при условии работы в оперативной памяти и до 10 раз при условии взаимодействия системы с жестким диском) посредством уменьшения количества операций чтения и записи на жесткий диск – теперь существенная часть операций производится в реальном времени.
- Такая технология обработки информации стала возможной благодаря хранению информации о каждом операторе в оперативной памяти. Это дает и еще одно преимущество – все процессы, связанные с данными (в том числе, обработка потоков и пакетов информации и машинное обучение) происходят на одном и том же кластере данных, в одном и том же приложении.
Все это, естественно, возможно без потери способности фреймворка к горизонтальной масштабируемости и с сохранением заявленной «бесшовной» архитектуры приложения.
Архитектура Apache Spark
Фреймворк состоит из четырех функциональных модулей, работающих в пределах одного кластера данных и одновременно распределенных горизонтально по всему кластеру компьютеров, работающих на Hadoop.
Первый модуль носит название SparkSQL – и, сообразно ему, дает возможность интеграции SQL-запросов со всеми без исключения элементами фреймворка. Благодаря представлению информации в виде так называемых упругих распределенных наборов данных (RDD), осуществляется быстрый и простой доступ к данным через прикладные интерфейсы на Python, Scala и Java. Кроме того, такая технология позволяет запрашивать данные и одновременно запускать сложные алгоритмы их анализа.
Второй элемент ApacheSpark – SparkStreaming, компонент, позволяющий пользователю писать и запускать приложения на Scala и Java в потоковом режиме. При этом, приложение сможет одновременно работать как с потоками данных, так и осуществлять пакетную обработку – без существенных изменений в коде. Плюс ко всему, фреймворк способен автоматически восстанавливать данные после ошибочных действий со стороны системы – от пользователя в этом случае не потребуется написать ни строчки кода.
Следующие два компонента призваны решать вполне четкие задачи. Первый из них, библиотека машинного обучения MLib, обладает отличной способностью интеграции – ее можно подключать к прикладным интерфейсам на все той же троице языков – Java, Python и Scala. Еще два ключевых момента заключаются в скорости тестирования и обучения (все те же 100х по сравнению с MapReduce) и простотой развертки – библиотека работает на уже существующих компьютерах кластера Hadoop и с уже существующими данными.
Последний, пятый, компонент фреймворка – прикладной интерфейс GraphX для работы с графами и графо-параллельных вычислений. Модуль обладает такими важными характеристиками как гибкость – то есть способность «бесшовной» работы как с графами, так и с коллекциями данных и скорость работы – приложение показывает наиболее высокие результаты в своем классе.
Резюме, или почему Spark?
Резюмируя, попробуем назвать причины, по которым фреймворк заслужил такое внимание:
- Во-первых, скорость работы на всех уровнях фреймворка – от запросов SQL до вычислений на графах и машинного обучения. Цифра 100х зацепила многих, и в особенности представителей бизнеса, для которых время – это деньги в прямом смысле слова.
- Во-вторых, многофункциональность. Действительно, рассмотрев подробнее архитектуру Spark, мы с вами можем прийти к выводу, что столь богатые возможности одного-единственного приложения не могут остаться без внимания.
- В-третьих, Spark является модификацией MapReduce в том смысле, что с внедрением нового фреймворка пользователи не рискуют такими существенными характеристиками предшественника как неограниченная горизонтальная масштабируемость и способность восстанавливаться даже после серьезных ошибок системы, а также полная интеграция с экосистемой Hadoop и, как следствие, возможность работы с существующими компьютерами и данными.
Быстрее, выше, сильнее – таков, кажется, девиз разработчиков «быстрого как молния» ApacheSpark. И в эту мечту, на наших глазах превращающуюся в реальность, сегодня верит все больше и больше специалистов, бизнесменов и просто тех, кто, как и мы с вами, интересуется необъятным миром больших данных.
Автор: Елизавета Филиппова