Зачем вам Apache Livy или как скрестить Spark с Airflow для эффективных Big Data pipeline’ов

Spark, Airflow, обработка данных, архитектура, Livy, большие данные, Big Data

Сегодня поговорим про построение конвейеров обработки данных (data pipeline) на примере совместного использования Apache Spark с Airflow и рассмотрим типовые проблемы этой комбинации. Читайте в нашей статье, как автоматизировать задачи пакетной и потоковой обработки больших данных (Big Data) с помощью гибкого REST-API Apache Livy, включая работу с Python-кодом, отказоустойчивость и безопасность.

Что не так с комбо Apache Spark и Airflow: смотрим на примере data pipeline

Представим достаточно простой data pipeline, когда необходимо обеспечить запуск Spark-задач по расписанию в рамках следующего ETL-процесса [1]:

  • непрерывный поток приходит с видеокамер, датчиков и других IoT-устройств, данные пишутся в топики Apache Kafka;
  • одно приложение Apache Spark обеспечивает извлечение данных (Extract) в эффективном для хранения и чтения Big Data столбцовом формате, например, Parquet, чтобы далее отправить их (Load) в историческое хранилище (архив) на базе Apache Hadoop или Amazon S3;
  • другое Spark-приложение выполняет агрегацию событий с малой задержкой (Transform) и отправляет результаты в новые топики Kafka;
  • еще одно Spark-приложение выполняет пакетные отчеты по данным из топиков Kafka, отображая их на дэшбордах BI-систем (Load) и, при необходимости, отправляя оперативные предупреждения (alerts).
Kafka, Spark, data pipeline, Big Data, большие данные пример
Пример конвейера обработки данных (data pipeline) на базе Apache Kafka и Spark

В этом несложном примере появляется сразу несколько Spark-задач, которые необходимо запускать по расписанию. С этим отлично справляется Apache Airflow – open-source набор библиотек для разработки, планирования и мониторинга рабочих процессов, написанный на Python. Он решает задачи автоматизации создания, запуска и мониторинга data pipeline’ов, представляя процесс извлечения-преобразования-загрузки данных в виде единого проекта на Python. При этом доступен как наглядный web-GUI, так и среда разработки на Python. Задачи конвейера данных, которые надо выполнить в строго определенной последовательности по определенному расписанию в рамках единой смысловой цепочки, называются DAG (Directed Acyclic Graph, направленный ациклический граф) [2].

Однако, совместное использование Spark и Airflow ограничивается особенностями или недостатками последнего, о которых мы рассказывали здесь. В практическом смысле наиболее значимым из них является разделение по операторам, когда каждый оператор Airflow исполняется в своем python-интерпретаторе. Для каждой задачи создается свой файл с определением DAG, который не пересекается с другими и содержит собственный Spark Context – класс в Spark API, который является начальным этапом для создания Spark-приложения, а также может использоваться для создания общих структур данных (RDD, dataframe) и переменных. Это ограничение не позволяет запустить несколько операторов Airflow в едином Spark Context’е над общим пространством dataframe’ов. Обойти эту проблему можно с помощью Apache Livy – REST-API сервиса для взаимодействия с кластером Spark, о котором мы поговорим далее [3].

Что такое Apache Livy: краткий обзор возможностей для Data Engineer’а

Apache Livy – это служба, которая обеспечивает простое взаимодействие с кластером Spark через интерфейс REST, включая отправку заданий или фрагментов кода Spark, синхронное или асинхронное получение результатов, а также управление контекстом. Помимо REST API для взаимодействия с Apache Spark сервис Livy позволяет работать с клиентской библиотеку удаленных вызовов RPC (Remote Procedure Call). Apache Livy также упрощает взаимодействие между Spark и серверами приложений, что позволяет использовать Спарк для интерактивных веб- и мобильных систем. Таким образом, Apache Livy обеспечивает следующие возможности [4]:

  • совместная работа нескольких задач Spark от разных клиентов в рамках одного Spark Context’а;
  • общее использование кэшированных RDD или Dataframes для нескольких заданий и клиентов;
  • одновременное управление сразу несколькими контекстами Spark, в т.ч. их запуск в кластере Apache Hadoop YARN или Mesos вместо Livy Server для обеспечения высокой отказоустойчивости и параллелизма;
  • отправка задач на исполнение по расписанию в виде предварительно скомпилированных jar-файлов, фрагментов кода или через клиентский API Java или Scala;
  • безопасная аутентификация.
Apache Livy
Принцип работы Apache Livy

 

Возвращаясь к рассматриваемом примеру по data pipeline на базе Apache Spark и Kafka, отметим, что благодаря Livy можно вводить Python-код в программу, которую исполняет драйвер (driver), где запущена сессия Livy. Таким образом, обеспечивается гибкость работы с собственным кодом на Python в стиле Jupiter Notebook, что привычно каждому Data Scientist’у и удобно инженеру Big Data. Это позволяет в полной мере использовать Apache Airflow, автоматизируя создание и управление сложных конвейеров обработки данных в виде визуальных DAG-цепочек. Также появляется возможность оптимизировать созданный data pipeline, например, настраивая порядок преобразований так, чтобы Спарк смог максимально долго держать общие данные в памяти кластера. Поэтому, несмотря на «инкубаторский» статус в Apache Software Foundation, Livy активно используется в реальных Big Data проектах. В частности, компания «АльфаСтрахование» применяет этот полезный инструмент для инженерии больших данных с 2019 года [3].

Завтра мы продолжим разговор про эти инструменты Big Data, а технические подробности по администрированию и эксплуатации Apache Spark, Airflow и Livy для аналитики больших данных в проектах цифровизации своего бизнеса, а также государственных и муниципальных предприятий, вы узнаете на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Источники

  1. https://databricks.com/blog/2017/04/26/processing-data-in-apache-kafka-with-structured-streaming-in-apache-spark-2-2.html
  2. https://habr.com/ru/company/mailru/blog/339392/
  3. https://habr.com/ru/company/alfastrah/blog/466017/
  4. https://livy.apache.org/