Что такое Apache Spark?
Apache Spark – это система распределенной обработки данных с открытым исходным кодом, которая применяется для обработки больших данных. Быстрое выполнение аналитических запросов к данным любого объема обеспечивается благодаря кэшированию в памяти и оптимизированному исполнению запросов. Она предоставляет API для разработки на языках Java, Scala, Python и R, а также поддерживает повторное использование кода для разных рабочих нагрузок – пакетной обработки, интерактивных запросов, аналитики в реальном времени, машинного обучения и обработки графов. Ее используют организации из любой отрасли, в том числе в FINRA, Yelp, Zillow, DataXU, Urban Institute и CrowdStrike.
Как развивалась Apache Spark?
Apache Spark была запущена в 2009 году как исследовательский проект AMPLab Калифорнийского университета в Беркли. Это совместный проект студентов, исследователей и преподавателей, посвященный областям приложений с интенсивным использованием данных. Целью Spark было создание новой инфраструктуры, оптимизированной для быстрой итеративной обработки, такой как машинное обучение и интерактивный анализ данных, при сохранении масштабируемости и отказоустойчивости Hadoop MapReduce. Первая статья под названием Spark: Cluster Computing with Working Sets была опубликована в июне 2010 года, а исходный код Spark был открыт под лицензией BSD. В июне 2013 года Spark получила статус инкубатора в Фонде программного обеспечения Apache (ASF) и в феврале 2014 года был создан полноценный проект Apache. Spark может работать автономно, на Apache Mesos или чаще всего на Apache Hadoop.
Как работает система Apache Spark?
Hadoop MapReduce – это модель программирования для обработки больших наборов данных с помощью параллельного распределенного алгоритма. Разработчики могут писать многократно распараллеленные операторы, не беспокоясь о распределении работы и отказоустойчивости. Однако проблема MapReduce заключается в последовательном многоэтапном процессе выполнения задания. На каждом шаге MapReduce считывает данные из кластера, выполняет операции и записывает результаты обратно в HDFS. Поскольку каждый шаг требует чтения и записи на диск, задания MapReduce выполняются медленнее из-за задержки операции ввода-вывода на диск.
Spark был создан для устранения ограничений MapReduce за счет обработки в памяти, сокращения количества шагов в задании и повторного использования данных в нескольких параллельных операциях. При использовании Spark требуется всего один шаг для считывания данных в память, выполнения операций и обратной записи результатов, что значительно ускоряет выполнение. Spark также повторно использует данные, применяя кэш в памяти для значительного ускорения алгоритмов машинного обучения, которые многократно вызывают функцию в одном и том же наборе данных. Повторное использование данных осуществляется путем создания DataFrames, абстракции по сравнению с устойчивым распределенным набором данных (RDD), представляющим собой набор объектов, кэшируемых в памяти и повторно используемых в нескольких операциях Spark. Это значительно снижает задержку, благодаря чему Spark в несколько раз быстрее MapReduce, особенно при машинном обучении и интерактивной аналитике.
Ключевые отличия между Apache Spark и Apache Hadoop
Несмотря на различия в дизайне Spark и Hadoop MapReduce, многие организации считают эти инфраструктуры больших данных взаимодополняющими и используют их вместе для решения более обширных бизнес-задач.
Hadoop – это платформа с открытым исходным кодом, использующая распределенную файловую систему Hadoop (HDFS) в качестве хранилища, YARN как способ управления вычислительными ресурсами, используемыми различными приложениями, и реализацию модели программирования MapReduce в качестве движка исполнения. В типичной реализации Hadoop также используются различные механизмы исполнения, такие как Spark, Tez и Presto.
Spark – это платформа с открытым исходным кодом, ориентированная на интерактивные запросы, машинное обучение и рабочие нагрузки в реальном времени. У нее нет собственной системы хранения, но она выполняет аналитику в других системах хранения данных, таких как HDFS, или в иных популярных хранилищах, таких как Amazon Redshift, Amazon S3, Couchbase, Cassandra и других. Spark на Hadoop использует YARN для совместного использования кластера и набора данных, как и другие движки Hadoop, обеспечивая стабильный уровень обслуживания и отклика.
В чем заключаются основные преимущества Apache Spark?
Apache Spark обладает множеством преимуществ, которые делают его одним из самых активных проектов в экосистеме Hadoop. Примеры перечислены ниже.
Скорость
Spark может обеспечивать быстрое выполнение аналитических запросов к данным любого объема благодаря кэшированию в памяти и оптимизированному исполнению запросов.
Удобство для разработчиков
Apache Spark по умолчанию поддерживает Java, Scala, R и Python, что позволяет выбирать язык для написания приложений. Эти API упрощают работу разработчиков, поскольку скрывают сложность распределенной обработки за простыми высокоуровневыми операторами, что значительно сокращает объем требуемого кода.
Поддержка нескольких рабочих нагрузок
Apache Spark поддерживает несколько рабочих нагрузок, включая интерактивные запросы, аналитику в реальном времени, машинное обучение и обработку графов. Одно приложение может легко комбинировать несколько рабочих нагрузок.
Что такое рабочие нагрузки Apache Spark?
Платформа Spark включает в себя:
- Spark Core в качестве основы платформы
- Spark SQL для интерактивных запросов
- Spark Streaming для аналитики в режиме реального времени
- Spark MLlib для машинного обучения
- Spark GraphX для обработки графов
Spark Core
Spark Core является основой платформы – движком. Он отвечает за управление памятью, устранение неисправностей, планирование, распределение и мониторинг заданий, а также за взаимодействие с системами хранения данных. Spark Core доступен через интерфейс прикладного программирования (API), созданный для Java, Scala, Python и R. Эти API скрывают сложность распределенной обработки за простыми высокоуровневыми операторами.
MLlib
Машинное обучение
Spark включает в себя MLlib – библиотеку алгоритмов, которые подходят для машинного обучения любых масштабов. Специалисты по обработке данных могут обучать модели машинного обучения на R или Python на любом источнике данных Hadoop, сохранять их с помощью MLlib, а также импортировать их в конвейер на основе Java либо Scala. Spark был разработан для быстрых интерактивных вычислений, производимых в памяти, что позволяет быстро выполнять операции машинного обучения. Алгоритмы включают возможность классификации, регрессии, кластеризации, совместной фильтрации и анализа закономерностей.
Spark Streaming
Режим реального времени
Spark Streaming – это решение, работающее в режиме реального времени, которое использует функцию быстрого планирования Spark Core для анализа потоковой передачи. Это решение принимает данные в виде мини-пакетов и дает возможность анализировать их с помощью того же прикладного кода, написанного для пакетной аналитики. Это повышает производительность разработчиков, поскольку они могут использовать один и тот же код для пакетной обработки и для приложений потоковой передачи в реальном времени. Spark Streaming поддерживает данные из приложений Twitter, Kafka, Flume, HDFS и ZeroMQ, а также многие другие данные из экосистемы Spark Packages.
Spark SQL
Интерактивные запросы
Spark SQL – это распределенный механизм запросов, который обрабатывает интерактивные запросы с низкой задержкой почти в 100 раз быстрее, чем MapReduce. Он включает экономичный оптимизатор, столбцовое хранилище и генерацию кода для быстрых запросов с возможностью масштабирования до тысяч узлов. Для запросов к данным бизнес-аналитики могут использовать стандартный SQL или язык запросов Hive. Разработчики могут использовать API, доступные на языках Scala, Java, Python и R. Они поддерживают различные встроенные источники данных, включая JDBC, ODBC, JSON, HDFS, Hive, ORC и Parquet. Другие популярные хранилища – Amazon Redshift, Amazon S3, Couchbase, Cassandra, MongoDB, Salesforce.com, Elasticsearch и многие другие – можно найти в экосистеме Spark Packages.
GraphX
Обработка графов
Spark GraphX – это распределенная среда обработки графов на основе Spark. GraphX предоставляет ETL, исследовательский анализ и итеративные вычисления на графах, позволяющие пользователям интерактивно создавать и преобразовывать графовую структуру данных в любом масштабе. Эта среда поставляется с очень гибким API и набором распределенных алгоритмов Graph.
Для чего используют Apache Spark?
Spark – это распределенная система обработки данных с открытым исходным кодом, которая применяется для обработки больших данных. Она используется во всех типах сценариев использования больших данных для выявления закономерностей и предоставления аналитических данных в режиме реального времени. Примеры использования приведены ниже.
Финансовые сервисы
Spark используют в банковской сфере для прогнозирования оттока клиентов и предоставления рекомендаций новых финансовых продуктов. В банковских инвестициях Spark используют для анализа цен на акции с целью прогнозирования будущих тенденций.
Здравоохранение
Spark используют сотрудники организаций комплексного ухода за пациентами для предоставления данных о каждом взаимодействии с пациентом своим медицинским работникам первичного звена. Spark также можно использовать для прогнозирования и предоставления рекомендаций для лечения пациентов.
Обрабатывающая промышленность
Spark используют для предотвращения простоев подключенного к Интернету оборудования, рекомендуя, когда проводить профилактическое обслуживание.
Розничная торговля
Spark используется для привлечения и удержания клиентов с помощью персонализированных услуг и предложений.
Как работает развертывание Apache Spark в облаке?
Spark – идеальная рабочая нагрузка в облаке, поскольку за счет масштаба облако обеспечивает производительность, масштабируемость, надежность, доступность и значительную экономию. Исследование ESG показало, что 43 % респондентов считают облако основным местом для развертывания Spark. Основные причины, по которым клиенты считают облако преимуществом для Spark, – это более быстрое развертывание, повышение доступности, более частые обновления функций и возможностей, повышение эластичности, расширение географического охвата и плату по факту использования.
Какие существуют предложения AWS для Apache Spark?
Amazon EMR – лучший вариант развертывания Apache Spark в облаке. Сервис сочетает возможности интеграции и строгость тестирования, характерные для коммерческих дистрибутивов Hadoop и Spark, с масштабируемостью, простотой и экономичностью облака. Amazon EMR позволяет запускать кластеры Spark за считанные минуты без необходимости выделять узлы, настраивать и оптимизировать кластер или изменять конфигурацию Spark. EMR позволяет выделять от одного до сотен и даже тысяч вычислительных инстансов за считанные минуты. Вы можете использовать автомасштабирование, чтобы EMR автоматически вертикально масштабировал кластеры Spark для обработки данных любого размера и возвращался к ним по завершении работы, чтобы не платить за неиспользуемые ресурсы. Вы можете сократить расходы, установив определенный срок и сэкономив до 75 %, используя зарезервированные инстансы Amazon EC2, или запустив кластеры на свободных вычислительных мощностях AWS и сэкономив до 90 %, используя EC2 Spot.
Начните работу с Apache Spark на AWS, создав аккаунт уже сегодня.
AWS: дальнейшие шаги
Получите мгновенный доступ к уровню бесплатного пользования AWS.