Что под капотом Apache Livy: принципы и особенности работы со Spark

AirFlow, Livy, Python, Spark, архитектура, обработка данных, Big Data, большие данные, безопасность, security

Вчера мы рассказывали про особенности совместного использования Apache Spark с Airflow и достоинства подключения Apache Livy к этой комбинации популярных Big Data фреймворков. Сегодня рассмотрим подробнее, как работает Apache Livy, а также за счет чего этот гибкий API обеспечивает удобство работы с Python-кодом и общие Spark Context’ы для разных операторов Airflow и не только.

Когда вам нужен с Apache Livy: 5 популярных кейсов

Прежде всего, отметим типовые сценарии, когда целесообразно использовать Apache Livy при работе со Спарк [1]:

  • необходима единая сессия Spark (session) для нескольких клиентов, которые достаточно компактны и не перегружены сложными настройками;
  • нужно быстро настроить доступ к кластеру Spark;
  • требуется интегрировать Spark в мобильное приложение;
  • необходимо поддерживать работу нестабильного кластера, не изменяя каждый раз его конфигурацию;
  • нужно организовать удаленный запуск Spark-задач по расписанию.

Таким образом, Apache Livy является агентом для запросов Spark, отправляя код в кластер в виде фрагментов скрипта или пакетов. При этом он предоставляет программный API (programmatic API) для Java, Scala и Python, который позволяет приложениям выполнять код внутри Spark без необходимости поддерживать локальный контекст [2].

Как взаимодействовать с Apache Spark через Livy: режимы и интерфейсы

Поясним еще раз, зачем вообще нужен Apache Livy для Spark. Спарк предоставляет 2 режима для работы с данными [3]:

  • интерактивный, который обеспечивается Spark-Shell, pySpark и SparkR REPL;
  • пакетный, когда используется Spark-submit для отправки Spark-приложения в кластер без взаимодействия в процессе выполнения.

На первый взгляд эти 2 режима выглядят по-разному, однако, в глубине они едины. Когда пользователь выполняет команду оболочки, чтобы запустить клиент для отправки приложения Спарк в кластер, после запуска приложения этот клиент может либо продолжать работать как REPL (интерактивный режим), либо просто завершиться (пакетный режим). Независимо от режима, выбранного пользователем, запустить Spark-приложение можно, войдя в шлюз кластера или с локальной машины. Однако, оба варианта имеют следующие недостатки [3]:

  • централизация накладных расходов ресурсов и возможность сбоя шлюза;
  • трудности с внедрением комплексного механизма контроля доступа и интеграции с существующими службами безопасности, такими как Apache Knox, Ranger;
  • излишнее раскрытие подробностей развертывания приложения конечным пользователям.

Избежать этих проблем запуска Spark-приложений с удаленного компьютера поможет Apache Livy – REST-интерфейс Спарк для выполнения операторов, заданий и приложений. Простота и удобство – одни из основных преимуществ, которые он дает инженеру Big Data. Например, для связи с его REST API используется обычный HTTP-клиент, который позволяет легко получить доступ, с учетом того, что состояния и списки доступны даже для браузеров. Кроме того, протокол HTTP/HTTPS знаком каждому разработчику, позволяет работать с методами GET, POST и пр., обеспечивая при этом все необходимые меры безопасности. Есть 2 режима для взаимодействия с интерфейсом Livy [1]:

  • интерактивные сессии (Interactive Sessions), которые запускают сеанс, куда можно отправлять операторы. При наличии ресурсов они будут выполнены, и можно будет получить выходные данные. Этот режим подходит для экспериментов с данными или для быстрых вычислений.
  • Jobs/Batch-режим, который отправляют пакеты кода как программы. Как правило, это используется для запуска обычных задач с некоторыми аргументами и рабочей нагрузкой, выполняемых в фоновом режиме. Например, задача подготовки данных, которая принимает в качестве параметров каталоги ввода и вывода.

Еще 4 полезных особенности Apache Livy

Перечислим еще несколько характеристик этого REST API, благодаря которым он обеспечивает такую гибкость и комфорт в эксплуатации:

  • использование Apache Zeppelin в качестве интерпретатора аналогично широко известному в Data Science-инструменту Jupyter Notebook. Это означает, что код пишется непосредственно в записной книжке и выполняется для Livy REST API, без самостоятельно обработки HTTP-запросов [1]. Это очень удобно и дает так называемую гибкость, к который привыкли Python-разработчики [4].
  • для безопасной аутентификации в Livy можно использовать протокол Для этого необходимо добавить в конфигурационный файл livy.confследующие свойства [5]:

livy.server.auth.type = kerberos

livy.server.auth.kerberos.principal = HTTP/_HOST@HADOOP.LOCALDOMAIN

livy.server.auth.kerberos.keytab = $KEYTAB

livy.server.launch.kerberos.principal = $USER/_HOST@HADOOP.LOCALDOMAIN

livy.server.launch.kerberos.keytab = $KEYTAB 

  • обеспечивает высокую доступность заданий Spark, выполняемых в кластере. В частности, в кластере Azure HDInsight если после удаленной отправки задания в кластер Spark служба Livy перестает работать, задание продолжит выполняться в фоновом режиме. Выполняя резервное копирование, служба Livy восстанавливает состояние задания и отправляет отчет. В серверной части этот REST API обеспечивает работу записных книжек Jupyter для HDInsight. Если записная книжка выполняет задание Spark, а служба Livy перезапускается, записная книжка продолжит выполнять ячейки кода [6].

В заключение отметим, что при всех достоинствах этого REST API для Спарк, не стоит использовать Livy каждый раз при отправке запроса к кластеру. Например, для серверной части Спарк, включая доступ к данным через Spark SQL, целесообразнее использовать Thriftserver вместо того, чтобы строить инфраструктуру вокруг Livy [1]. Напомним, Spark Thrift Server это порт Spark SQL для HiveServer2 от Apache Hive, который позволяет клиентам JDBC / ODBC выполнять SQL-запросы по протоколам JDBC и ODBC в Спарк. Благодаря этому бизнес-пользователи могут работать со своими BI-инструментами, такими как Tableau или MS Excel, подключаясь к Спарк с помощью интерфейса ODBC. Это позволяет использовать распределенные в памяти возможности механизма SQL-запросов, включая оптимизатор Catalyst, о котором мы писали здесь. Кроме того, SQL-запросы в Spark Thrift Server используют один и тот же контекст, что еще больше повышает производительность с использованием тех же источников данных [7]. Таким образом, Apache Livy – это не серебряная пуля работы со Спарк, о чем мы и поговорим завтра, сравнив его с Apache Ozzie – серверной системой планирования рабочих процессов для управления заданиями Hadoop.

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

Источники

  1. https://www.statworx.com/de/blog/access-your-spark-cluster-from-everywhere-with-apache-livy/
  2. https://livy.apache.org/docs/latest/programmatic-api.html
  3. https://medium.com/@dassum/apache-livy-a-rest-interface-for-apache-spark-f435540e26a9
  4. https://habr.com/ru/company/alfastrah/blog/466017/
  5. https://docs.datafabric.hpe.com/61/Hue/Configure_Livy_Security_Kerberos.html
  6. https://docs.microsoft.com/ru-ru/azure/hdinsight/spark/apache-spark-livy-rest-interface
  7. https://jaceklaskowski.gitbooks.io/mastering-spark-sql/content/spark-sql-thrift-server.html