Как установить Airflow | DATAENGINER

Как установить Airflow

Airflow — это потрясающий инструмент от Airbnb, который в настоящее время является своего рода стандартом развертывания ETL в области инженерии данных. Но в то же время вы также можете использовать Airflow для планирования конвейера машинного обучения и автоматизации всего конвейера машинного обучения (почти).

Установка Airflow

Шаг 1. Проверим что наша система использует последнюю версию пакетов для CentOS 7, проверять будет через менеджеров пакетов yum:

yum update -y

Шаг 2. Для установки Airflow установим последнюю версию python3 и pip3-python, для этого выполним команду:

yum install python3 python3-devel pip3-python -y

Шаг 3. Создадим пользователя под которым будет работать airflow, пользователя назовем так же airflow:

useradd airflow

Шаг 4. Теперь при помощи менеджера пакетов python3 установим airflow и дополнительно необходимые пакеты crypto и пакет для работы с базой данных в моей случае postgres, так же для работы с базой данных вы можете установить mysql:

pip3 install apache-airflow

Будет установлено большое количество пакетов, необходимых для работы airflow:

pip3 install 'apache-airflow[crypto]'

Будут проверены зависимости и при необходимости до установлены необходимые пакеты

pip3 install 'apache-airflow[postgres]'

Также после данной команды будут проверены версии пакетов и до установлены пакеты для работы с СУБД PostgreSQL.

Подготовка Демона Airflow

Изображение для публикации

Прежде чем мы сможем настроить наш systemdсервис для Airflow, нам нужно сделать некоторые приготовления. Первым шагом будет загрузка файлов определения службы из Airflow GitHub Репозитория.

Ссылка на ресурс:

https://github.com/apache/airflow/tree/master/scripts/systemd

Скачать служебные файлы демона

Шаг 5. Создадим временную папку для файлов загрузки.

mkdir /tmp/airflow-daemon
cd /tmp/airflow-daemon

Шаг 6. Затем загрузим файлы во временную папку.

wget https://raw.githubusercontent.com/apache/airflow/master/scripts/systemd/airflow
wget https://raw.githubusercontent.com/apache/airflow/master/scripts/systemd/airflow-scheduler.service
wget https://raw.githubusercontent.com/apache/airflow/master/scripts/systemd/airflow-webserver.service
wget https://raw.githubusercontent.com/apache/airflow/master/scripts/systemd/airflow.conf

В репозитории GitHub есть следующее краткое объяснение:

Файлы systemd в этом каталоге протестированы на системах на базе RedHat. 
Скопируйте (или свяжите) их в /usr/lib/systemd/system и скопируйте airflow.conf в /etc/tmpfiles.d/ или /usr/lib/tmpfiles.d/. 
Копирование airflow.conf гарантирует, что /run/airflow
создан с правильным владельцем и правами (0755 airflow airflow)
Затем вы можете запустить разные серверы с помощью systemctl start <service>. 
Включение служб может быть выполнено с помощью команды systemctl enable <service>.
По умолчанию конфигурация среды указывает на /etc/sysconfig/airflow. 
Вы можете скопировать файл «airflow» в этот каталог и настроить его по своему вкусу.
С некоторыми незначительными изменениями они, вероятно, работают в других системах systemd.

Что ж, я полагаю, что для большинства тех, кто не знаком с Linux, приведенная выше документация может быть очень расплывчатой ​​и вводящей в заблуждение. Итак, я нарисовал эту диаграмму, чтобы показать, какой файл по какому пути следует поместить.

Изображение для публикации

Шаг 7. Скопируем файлы по пути, указанному на схеме:

cp *.service /usr/lib/systemd/system/
cp airflow.conf /usr/lib/tmpfiles.d/
cp airflow /etc/sysconfig/

Шаг 8. Создадим необходимые каталоги,  которые требуются демону. Во-первых, ему нужен специальный каталог для хранения информации о времени выполнения, такой как файлы pid. Давайте создадим каталог в /run каталоге и изменим владельца и разрешение.

mkdir /run/airflow
chown airflow:airflow /run/airflow
chmod 0755 airflow -R

Обратите внимание, что для разрешения установлено значение, 0755 поскольку на практике у нас может быть несколько других пользователей для разработки DAG (рабочих процессов) в Airflow. При наличии 0755 разрешения он гарантирует, что у всех других пользователей есть вторичная группа, так как у них группа airflow, то будет достаточно данных разрешений.

Шаг 9. Еще один каталог, который нам нужно создать, — это домашний каталог Airflow, который включает:

  • Конфигурации воздушного потока
  • SQLite, который используется Airflow
  • Группы DAG
  • Журналы DAG

Обычно, если нет export AIRFLOW_HOME=..., они будут автоматически сгенерированы в домашнем каталоге текущего пользователя, например /home/airflow/airflow/. Это нормально, если вы тестируете Airflow или разрабатываете несколько групп DAG. Однако это не рекомендуется, а также неудобно в производстве, потому что другие пользователи не смогут легко получить доступ airflowк домашнему каталогу пользователя.

В моем случае я хотел бы разместить домашний каталог Airflow в каталоге /opt, поэтому давайте создадим его.

mkdir /opt/airflow
chown airflow:airflow airflow -R
chmod 775 airflow -R

Опять же, измените разрешение, чтобы разрешить всем пользователям в airflowгруппе не только читать, но и писать в каталог, потому что им нужны права чтобы изменить DAG.

Инициализация домашнего каталога Airflow

Шаг 10. Все готово. Теперь нам нужно инициализировать домашний каталог Airflow. Важно экспортировать домашний каталог в AIRFLOW_HOME переменную среды. В противном случае домашний каталог будет автоматически создан в домашней папке пользователя, как указано выше.

export AIRFLOW_HOME=/opt/airflow
airflow initdb

Если же у вас возникла ошибка, как на приведенном скриншоте:

Traceback (most recent call last):
File "/usr/local/bin/airflow", line 26, in
from airflow.bin.cli import CLIFactory
File "/usr/local/lib/python3.6/site-packages/airflow/bin/cli.py", line 94, in
api_module = import_module(conf.get('cli', 'api_client')) # type: Any
File "/usr/lib64/python3.6/importlib/init.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "/usr/local/lib/python3.6/site-packages/airflow/api/client/local_client.py", line 24, in
from airflow.api.common.experimental import delete_dag
File "/usr/local/lib/python3.6/site-packages/airflow/api/common/experimental/delete_dag.py", line 26, in
from airflow.models.serialized_dag import SerializedDagModel
File "/usr/local/lib/python3.6/site-packages/airflow/models/serialized_dag.py", line 35, in
from airflow.serialization.serialized_objects import SerializedDAG
File "/usr/local/lib/python3.6/site-packages/airflow/serialization/serialized_objects.py", line 28, in
import cattr
File "/usr/local/lib/python3.6/site-packages/cattr/init.py", line 1, in
from .converters import Converter, GenConverter, UnstructureStrategy
File "/usr/local/lib/python3.6/site-packages/cattr/converters.py", line 16, in
from attr import fields, resolve_types
ImportError: cannot import name 'resolve_types'

То необходимо переустановить cattrs пакет для python3, для этого выполните команду:

pip3 install cattrs==1.0.0

После чего повторите попытку инициализации базы данных

Конфигурация Airflow Демона

Шаг 11. Теперь все служебные файлы, файлы конфигурации и необходимые каталоги готовы. Нам нужно настроить демон, чтобы убедиться, что все указывает на правильные пути, прежде чем демон сможет работать правильно.

Прежде всего, давайте дважды проверим путь к airflow двоичному файлу, потому что он должен быть указан в определении службы позже.

which airflow




В моем случае двоичный файл имеет расположение: /usr/local/bin/airflow. Запишите, пожалуйста, свой, который, скорее всего, будет таким же, но на всякий случай обратите на него внимание. Не копируйте напрямую мой.

Затем давайте изменим определение airflow-webserver.

vim /usr/lib/systemd/system/airflow-scheduler.service

Измените ExecStart значение следующим образом.

ExecStart=/usr/local/bin/airflow scheduler

Точно так же изменим  airflow-webserver как и airflow-scheduler.

vim /usr/lib/systemd/system/airflow-webserver.service

Обратите внимание, что pid необходимо записать в только что созданный каталог /run/airflow.

ExecStart=/usr/local/bin/airflow webserver --pid /run/airflow/webserver.pid

Затем нам нужно изменить системную конфигурацию Airflow. В противном случае службы не будут знать, где находится домашний каталог Airflow.

vim /etc/sysconfig/airflow

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

AIRFLOW_CONFIG=/opt/airflow/airflow.cfg
AIRFLOW_HOME=/opt/airflow

На последнем этапе настройки служб нам необходимо включить эти службы, прежде чем мы сможем их запускать.

systemctl enable airflow-scheduler
systemctl enable airflow-webserver

Запустите настроенный демон Airflow

Шаг 12. Имея root разрешение (пользователь root или sudo), мы можем:

  • Запустите демон Airflow
systemctl start airflow-scheduler
systemctl start airflow-webserver
  • Проверить его статус
systemctl status airflow-scheduler
systemctl status airflow-webserver
  • Остановите демона
systemctl stop airflow-scheduler
systemctl stop airflow-webserver
  • Перезагрузите демон
systemctl restart airflow-scheduler
systemctl restart airflow-webserver
  • Просмотр журналов службы демона (последние 50 строк, количество строк настраивается с помощью -n параметра)
journalctl -u airflow-scheduler -n 50
journalctl -u airflow-webserver -n 50

Резюме

В этой статье было рассказано, как установить Airflow в системе CentOS, что есть недостатки, если мы просто запускаем Airflow из командной строки, поэтому нам нужно решить эту проблему, запустив его как демон.

Сначала нам нужно загрузить файлы определения службы из репозитория Apache Airflow GitHub, а затем поместить их в правильные системные каталоги. Нам также необходимо создать несколько папок, потому что они потребуются демону для правильной работы.

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

Постоянный редактор и автор сайта

Leave a reply:

Your email address will not be published.

Site Footer