ProCloud Yandex
16.02.2024
читать 5 минут

Apache Spark: платформа для обработки больших данных, вытеснившая Hadoop

/upload/iblock/81e/urkooxa6kjvfd37iedvxr607ay2z4lx2/Sover_opt.jpeg

Apache Spark SQL — это популярная платформа для крупномасштабного SQL, пакетной обработки, потоковой обработки и машинного обучения.

Определение Apache Spark

Система Spark – это платформа для обработки и анализа больших объемов данных, обладающая высокой производительностью и способностью распределять задачи на несколько компьютеров или узлов для эффективного параллельного выполнения.

Эти два основных свойства являются необходимыми в сфере обработки больших объемов данных и машинного обучения, где требуется использование высокопроизводительных вычислительных ресурсов для работы с большими наборами данных. Кроме того, система Spark упрощает задачу разработчиков, предоставляя простой API, который позволяет избавиться от рутины.

Apache Spark, созданный в AMPLab в 2009 году, стал одной из ключевых платформ для работы с большим количеством информации. Развернуть приложение Spark можно различными способами, оно поддерживает встроенные привязки для Java, Scala, Python и R. Spark, а также SQL, потоковую обработку данных, машинное обучение и работу с графами.

Spark RDD

В центре Apache Spark лежит концепция Resilient Distributed Dataset (RDD) – представление данных как неизменного набора объектов, который можно разделить между вычислительными узлами кластера. Операции с RDD также могут быть распределены по кластеру и выполнены параллельно в пакетном режиме, что обеспечивает быструю и масштабируемую параллельную обработку. Apache Spark преобразует команды пользователя по обработке данных в Directed Acyclic Graph, или DAG. DAG является слоем планирования Apache Spark; он определяет, какие задачи выполняются на каких узлах и в какой последовательности.

Набор данных для Spark может быть создан из любых объектов:

  • простых текстовых файлов;
  • баз данных SQL;
  • хранилищ NoSQL;
  • корзин Amazon S3 и многого другого.

Spark SQL

Интерфейс Spark SQL – это основной инструмент, который сегодня используют разработчики для создания приложений. Spark SQL основан на фреймворках для работы с данными, заимствованных из R и Python и предназначенных для работы со структурированными данными. Однако Spark SQL предлагает также и SQL2003 совместимый интерфейс для запросов данных, что полезно как для аналитиков, так и для разработчиков. Помимо поддержки стандартного SQL, Spark SQL предоставляет возможность чтения и записи данных различных хранилищ, таких как JSON, HDFS, Apache Hive, JDBC, Apache ORC, и Apache Parquet, причем все эти возможности доступны сразу «из коробки».

В запросах SQL можно использовать определяемые пользователем функции (UDF), подключив отдельные соединители из экосистемы пакетов Spark, такие как Apache Cassandra, MongoDB, Apache HBase и многие другие.

Выбрать несколько столбцов из фрейма данных можно, используя код:

citiesDF.select("name", "pop")

Используя интерфейс SQL, можно регистрировать фрейм данных как временную таблицу, после чего можно отправлять к нему SQL-запросы:

citiesDF.createOrReplaceTempView("cities")
spark.sql("SELECT name, pop FROM cities")

Apache Spark использует оптимизатор запросов Catalyst. Он осуществляет проверку данных и запросов, чтобы создать эффективный план работы всей системы. Его используют, чтобы выполнять необходимые вычисления во всем кластере.

Начиная с Apache Spark 2.x, интерфейс Spark SQL для фреймов и наборов данных все чаще используется разработчиками. Интерфейс RDD по-прежнему доступен, но его применение рекомендуется только в том случае, если ваши потребности не могут быть удовлетворены в рамках парадигмы Spark SQL (например, когда вам приходится работать на более низком уровне).

Spark MLlib и MLflow

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

Возможно обучить модели в Apache Spark, используя языки программирования R или Python, сохранять их при помощи MLlib, после чего импортировать на основе Java или Scala. MLflow – это платформа с открытым исходным кодом для управления жизненным циклом машинного обучения. Технически она не является частью проекта Apache Spark, но это продукт Databricks и других участников сообщества Apache Spark.

Сообщество работает над интеграцией MLflow с Apache Spark, чтобы предоставить такие функции MLOps, как отслеживание результатов экспериментов, реестры моделей, упаковка и другие функции, которые можно легко импортировать для вывода в масштабе Apache Spark и с помощью традиционных операторов SQL.

Структурированная потоковая передача

Apache Spark API высокого уровня, известный как структурированная потоковая передача, предоставляет возможность разработчикам создавать бесконечные потоковые кадры и наборы данных. В Spark 3.0 структурированная потоковая передача стала рекомендуемым методом обработки потоковых данных, заменив более старый подход, использовавшийся в Spark Streaming. В Spark Streaming возникали проблемы, особенно при работе с агрегацией времени событий и отложенной доставкой сообщений.

Все запросы к структурированным потокам проходят через Catalyst. Данная платформа использует три метода работы с окнами:

  • переключающиеся окна;
  • скользящие окна;
  • временные окна переменной длины с сеансами.

В Spark 3.1 и более поздних версиях потоки можно рассматривать как таблицы, а таблицы – как потоки. Возможность объединения нескольких потоков с помощью широкого спектра SQL-подобных соединений создает дополнительные возможности для работы. Вот простой пример создания таблицы из источника потоковой передачи:

val df = spark.readStream
  .format("rate")
  .option("rowsPerSecond", 20)
  .load()

df.writeStream
  .option("checkpointLocation", "checkpointPath")
  .toTable("streamingTable")

spark.read.table("myTable").show()

Структурированная потоковая передача по умолчанию использует схему микропакетной обработки потоковых данных. Но в Spark 2.3 к структурированной потоковой передаче был добавлен режим непрерывной обработки с малой задержкой. Это позволило обрабатывать ответы с большими задержками всего в 1 мс и сделало фреймворк Spark намного более конкурентоспособным. Непрерывная обработка данных – это большая нагрузка на софт и железо. Хотя она поддерживает запросы SQL к потокам, в настоящее время она не поддерживает агрегации SQL.

Spark 2.3 вышел в 2018 году, начиная с Spark 3.3.2, выпущенного в марте 2023 года, непрерывная обработка по-прежнему помечена как экспериментальная.

Если вы планируете разработать новое приложение для потоковой передачи данных на базе платформы Apache Spark Python, мы советуем вам обратить внимание на возможности структурированной потоковой передачи. Эта современная технология значительно облегчает процесс создания и сопровождения потоковых приложений. Несмотря на то, что традиционные API Spark Streaming все еще доступны, мы настоятельно рекомендуем перейти на структурированную потоковую передачу для повышения стабильности приложений.

Delta Lake

Как и MLflow, Delta Lake технически является отдельным проектом. Однако за последние пару лет Delta Lake стала неотъемлемой частью экосистемы Spark, сформировав ядро ​​того, что Databricks называет архитектурой Lakehouse. Delta Lake дополняет облачные технологии транзакциями ACID, унифицированной семантикой запросов для пакетной и потоковой обработки, а также соблюдением схемы, устраняя необходимость в отдельном хранилище данных.

Использовать формат Delta Lake (построенный на основе файлов Parquet) в Apache Spark так же просто, как использовать формат delta:

df = spark.readStream.format("rate").load()

stream = df
  .writeStream
  .format("delta")
  .option("checkpointLocation", "checkpointPath")
  .start("deltaTable")

API Pandas в Spark

Отраслевым стандартом обработки и анализа данных в Python является библиотека Pandas. В Apache Spark 3.2 используется новый API, который позволяет применять большую часть API Pandas со Spark. Теперь люди, работающие с данными, могут просто заменить import pyspark.pandas as pd  и быть в некоторой степени уверены, что их код продолжит работать. Также они могут воспользоваться преимуществами многоузлового выполнения Apache Spark. На данный момент охвачено около 80% API Pandas, а в будущих выпусках планируется достичь 90% покрытия.

Запуск Apache Spark

Менеджер кластера является неотъемлемой частью Apache Spark и выполняет роль посредника между двумя основными компонентами приложения – драйвером и исполнителями. Драйвер преобразует пользовательский код в задачи, которые могут быть распределены по рабочим узлам, а исполнители запускаются на этих узлах и выполняют эти задачи.

Возможно, вам понадобится использовать более надежную систему управления ресурсами или кластером, чтобы эффективно распределить рабочее пространство в соответствии с вашими требованиями. Это можно достичь, используя платформу Apache Spark и виртуальную машину Java на каждом узле вашего кластера, установив режим автономного кластера по умолчанию. Установка Spark осуществляется стандартным способом.

На предприятиях обычно использовали Apache Spark Hadoop YARN, но по мере того, как Hadoop становится менее популярным, все больше компаний обращаются к развертыванию Apache Spark в Kubernetes. Apache Spark 3.x улучшили интеграцию с Kubernetes, включая возможность определять шаблоны модулей для драйверов и исполнителей, а также использовать собственные планировщики, такие как Volcano.

Платформа Databricks Lakehouse

Databricks, компания, в которой работают создатели Apache Spark, применила иной подход. В течение многих лет Databricks предлагала комплексную управляемую облачную службу, которая включает в себя:

  • кластеры Apache Spark;
  • поддержку потоковой передачи;
  • интегрированную веб-разработку блокнотов;
  • запатентованную оптимизированную производительность ввода-вывода по сравнению со стандартным дистрибутивом Apache Spark.

Платформа Databricks Lakehouse теперь доступна всем основным поставщикам облачных услуг и становится оптимальным способом для взаимодействия с Apache Spark.

Учебные пособия по Apache Spark

Мы рекомендуем начать с учебного портала Databricks, который обеспечит введение во фреймворк, хотя и будет слегка смещен в сторону платформы Databricks. Для более глубокого изучения стоит сфокусироваться на Spark Workshop, который представляет собой подробный обзор возможностей Apache Spark. Также доступны книги. Spark: The Definitive Guide – введение в предмет, написанное двумя сопровождающими Apache Spark специалистами. Это руководство по эффективной обработке данных с помощью Apache Spark в больших масштабах.

Хотите узнавать больше о технологиях и наших облачных продуктах? Подписывайтесь на нашу рассылку и следите за новостями: Телеграм и Вконтакте.

Новости
18 апреля 202418.04.2024
читать 2 минутычитать 2 мин
Дайджест обновлений продуктов Q1
5 апреля 202405.04.2024
читать 1 минутучитать 1 мин
ProCloud CPO Диана Беда в рейтинге ИТ-лидеров от Global CIO
28 марта 202428.03.2024
читать 1 минутучитать 1 мин
Запуск новой локации: Казахстан