Как запустить Apache AirFlow в Google Colab с ngrok

Apache AirFlow GUI Google Colab, обучение Apache AirFlow, курсы дата-инженеров, обучение разработчиков Big Data, разработка AirFlow конвейеров, Школа Больших Данных Учебный Центр Коммерсант

Сегодня рассмотрим, как запустить Apache AirFlow на мощностях Google в интерактивной среде Colab и войти в веб-GUI этого фреймворка, создав туннель локального хоста на публичный URL с помощью утилиты ngrok.

Запуск Apache AirFlow в Google Colab

Хотя Google Colab является мощным облачным окружением для запуска и написания Python-кода, выполнение написанных на этом языке программирования цепочек задач (DAG, Directed Acyclic Graph) Apache AirFlow непосредственно в среде Colab не поддерживается. Это обусловлено тем, что Airflow является системным сервисом (демоном), который запускается на сервере и управляет запуском задач. Однако, можно настроить AirFlow в облаке, например, на Google Cloud Platform, и запускать DAG-файлы из Colab, используя удаленный исполнитель. Также можно установить AirFlow в Colab, написать и запустить DAG. Посмотреть состояние запущенного DAG можно в веб-GUI AirFlow, запустив веб-сервер. При запуске в Colab этот веб-сервер запускается на удаленной машине, хотя изначально он привязан к сокету http://localhost:8080, т.е. порту 8080 на локальном хосте. Поэтому, чтобы достучаться до веб-интерфейса фреймворка, запускаемого в Google Colab, необходимом прокинуть туннель, который делает локальный хост доступным извне. Для этого можно использовать утилиту ngrok, по аналогии как это было сделано с приложением Apache Spark, что я показывала здесь. Сервис ngrok позволяет открыть доступ к внутренним ресурсам машины, на которой он запущен, из внешней сети путем создания публичного URL-адреса, все запросы на который будут переброшены на локальный адрес и заданный порт удаленной машины.

Для этого в Colab необходимо установить целый набор пакетов и импортировать необходимые модули:

###############################################ячейка №1 в Google Colab#############################
#Установка Apache Airflow и инициализация базы данных
!pip install apache-airflow
!airflow initdb

#Установка инструмента ngrok для создания безопасного туннеля для доступа к веб-интерфейсу Airflow из любого места
!wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip 
!unzip ngrok-stable-linux-amd64.zip 
!pip install pyngrok

#импорт модулей 
from pyngrok import ngrok
import sys
import os
import datetime
from airflow import DAG
from airflow.operators.bash import BashOperator

Далее пробросим туннель с помощью ngrok, используя свой ранее полученный токен аутентификации:

###############################################ячейка №2 в Google Colab#############################
#Задание переменной auth_token для аутентификации в сервисе ngrok.
auth_token = "……….ваш токен аутентификации……….." #@param {type:"string"}
# Since we can't access Colab notebooks IP directly we'll use
# ngrok to create a public URL for the server via a tunnel

# Authenticate ngrok
# https://dashboard.ngrok.com/signup
# Then go to the "Your Authtoken" tab in the sidebar and copy the API key

#Аутентификация в сервисе ngrok с помощью auth_token
os.system(f"ngrok authtoken {auth_token}")

#Запуск ngrok, который создаст публичный URL для сервера через туннель 
#для доступа к веб-интерфейсу Airflow из любого места. 
#addr="8888" указывает на порт, на котором запущен веб-сервер Airflow, а proto="http" указывает на использование протокола HTTP
public_url = ngrok.connect(addr="8888", proto="http")

#Вывод публичного URL для доступа к веб-интерфейсу Airflow
print("Адрес Airflow GUI:", public_url)

В области вывода показана ссылка, которая нам пригодится для доступа к веб-серверу GUI AirFlow.

ngrok туннель google Colab
Туннель к внешнему URl с помощью утилиты ngrok

Затем следует инициализировать базу данных AirFlow – по умолчанию это легковесная резидентная СУБД SQLite, которая хранится в памяти, а не на жестком диске. Также я создала пользователя anna, под логином и паролем которого можно будет войти в веб-интерфейс AirFlow:

#############################ячейка №3 в Google Colab#########################
!airflow db init #Инициализация базы данных Airflow
!airflow upgradedb #Обновление базы данных Airflow

#Создание нового пользователя в Apache Airflow с именем пользователя anna, именем Anna, фамилией Anna, адресом электронной почты anna.doe@example.com и паролем password. 
#Этот пользователь будет иметь роль Admin, которая дает полный доступ к интерфейсу Airflow.
!airflow users create --username anna --firstname Anna --lastname Anna --email anna.doe@example.com --role Admin --password password

 

Наконец, запустим веб-сервер AirFlow на ранее тунеллированном с помощью утилиты ngrok порте 8888:

##########################ячейка №5 в Google Colab#######################
#запуск веб-сервера Apache Airflow на порту 8888. Веб-сервер Airflow предоставляет пользовательский интерфейс для управления DAG’ами, 
#просмотра логов выполнения задач, мониторинга прогресса выполнения
!airflow webserver --port 8888

Успешный запуск веб-сервера отображается в области вывода Colab:

AirFlow Colab
Запуск веб-сервера AirFlow в Colab

Теперь можно войти в веб-интерфейс Apache AirFlow, по ссылке, ранее сгенерированной утилитой ngrok. Надо ввести логин и пароль пользователя, также созданного раньше

GUI AorFlow login
Вход в консоль веб-сервера AirFlow

В разделе DAG открылись цепочки задач, которые создаются по умолчанию в качестве демонстрационных и обучающих материалов. Некоторые из них я запустила с помощью команды Trigger DAG в GUI, что сразу визуализировалось в интерфейсе.

DAG AirFlow
Обзор DAG

В разделе безопасность можно просмотреть список пользователей.

Список пользователей AirFlow
Список пользователей

Все запущенные конвейеры, т.е. DAG, отображаются вместе со своими метаданными, включая состояние, дату старта и окончания, а также вариант запуска: вручную или по расписанию. В моем случае все они были запущены вручную.

Dag Run List
Запуски DAG

Также можно просмотреть детали конкретного DAG, от его визуализации до Python-кода.

DAG AirFlow
Детали отдельного DAG

По завершении работы с веб-интерфейсом AirFlow надо освободить занятый порт с помощью следующего кода:

##########################ячейка №6 в Google Colab#######################
!pkill -f ngrok #поиск и завершение процесса, который запущен с помощью команды ngrok
# отключение публичного URL, созданного с помощью ngrok для веб-сервера Airflow
ngrok.disconnect(public_url=public_url)

Как отправить и запустить свой DAG в этом веб-интерфейсе, читайте в новой статье.

Узнайте больше про использование Apache AirFlow  для дата-инженерии и аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Я даю свое согласие на обработку персональных данных и соглашаюсь с политикой конфиденциальности.
Поиск по сайту