Jak skonfigurować Apache Airflow, aby uruchomić wiele DAGów i zadań równolegle?

Jak skonfigurować Apache Airflow, aby uruchomić wiele DAGów i zadań równolegle?

Problem

Na początku Twojej podróży z Airflow przypuszczam, że napotkałeś sytuację, gdy tworzyłeś wiele DAG-ów z zawierających jakieś zadania i kiedy uruchamiałeś wszystkie DAG’i w tym samym czasie to zaobserwowałeś, że niezależne zadania z niezależnych DAG są uruchamiane sekwencyjnie, NIE równolegle, jak zakładałeś, że powinno być.

Dlaczego?

Jest to związane z domyślną konfiguracją Apache Airflow. W pliku konfiguracyjnym znajduje się parametr “executor”, którego domyślną wartością jest: SequentialExecutor. W kolejnych krokach pokażę, jak skonfigurować instancję Airflow tak, aby można było uruchamiać DAGi i zadania w trybie równoległym.

Airflow – proces instalacji

Zanim zainstalujemy Airflow, zainstaluj brakujące biblioteki dla klienta MySQL:

sudo apt-get install python3.6-dev libmysqlclient-dev

Teraz możemy zainstalować Apache Airflow z dodatkową funkcją [mysql]. Umożliwi nam to wykorzystanie bazy danych MySQL jako backend dla Airflow.

export SLUGIFY_USES_TEXT_UNIDECODE=yes && pip install apache-airflow[mysql,crypto]

Podczas standardowej instalacji uruchamiane jest polecenie, które tworzy bazę danych SQLite w katalogu AIRFLOW_HOME, która pozwala użytkownikowi rozpocząć pracę z Airflow. Oczywiście, jest to poprawny sposób. Musisz mieć jakiś punkt startowy.

# Domyślna inicjalizacja bazy danych SQLite 
airflow initdb

Jak skonfigurować Apache Airflow, aby uruchamiać zadania równolegle?

Najpierw musisz mieć nowe miejsce na metadane Airflow. W naszym przypadku wykorzystam bazę danych MySQL. W tym scenariuszu już zainstalowałem bazę danych MySQL na tej samej maszynie co Airflow, ale możesz oczywiście użyć innej, do której masz otwarte połączenie z hosta Airflow.

Jeśli nie masz już zainstalowanej bazy danych MySQL, zainstaluj ją za pomocą mojego samouczka: Jak zainstalować bazę danych MySQL na Ubuntu 18.04?

Utwórz użytkownika “airflow” i bazę danych w instancji MySQL

Jeśli mamy już uruchomioną bazę danych MySQL, musimy stworzyć użytkownika i bazę danych dedykowaną dla usługi Airflow. Połączmy się z MySQL. W moim przypadku użyję użytkownika root do stworzenia nowego użytkownika i bazy danych “airflow”.

mysql -u root -p

Utwórz nową bazę danych:

mysql> CREATE DATABASE airflow;

Teraz utwórz nowego użytkownika i nadaj mu wszystkie uprawnienia do bazy danych nowo utworzonej bazy danych.

-- Utwórz użytkownika "airflow"
mysql> CREATE USER 'airflow'@'localhost' IDENTIFIED BY 'airflow';

-- Nadaj uprawnienia
mysql> GRANT ALL PRIVILEGES ON airflow. * TO 'airflow'@'localhost';

-- Przeładuj uprawnienia
mysql> FLUSH PRIVILEGES;

Zmień plik konfiguracyjny airflow.cfg

Teraz wchodzimy w główną fazę konfiguracji. Airflow używa pliku airflow.cfg, w którym określone są wszystkie parametry konfiguracyjne. Plik konfiguracyjny można znaleźć w katalogu $ AIRFLOW_HOME. Otwórzmy go i zmieńmy parametry executor, sql_alchemy_conn i fernet_key.

executor:

To własnie zmiana executor’a umożliwi nam uruchamianie zadań równolegle. Ale użycie np. LocalExecutor jest tylko możliwe, gdy użyjemy dodatkowej bazy danych, niż domyśla, np. MySQL czy Postgres.

# executor = SequentialExecutor
executor = LocalExecutor

sql_alchemy_conn:

Tu definiujemy połączanie do naszej bazy danych.

# sql_alchemy_conn = sqlite:////home/pawel/airflow/airflow.db
sql_alchemy_conn = mysql://airflow:airflow@localhost:3306/airflow

fernet_key:

Jeśli nie wiesz, jak utworzyć własny klucz Ferneta, wykonaj ten samouczek: Airflow: tworzenie klucza Frenet

Zastąp istniejącą wartość, używając nowej utworzonej przez Ciebie.

fernet_key = 30NkeeYthODONuaGqBNb13x_q_DSWuG6IUKpyb3t4Pc=

Jeszcze jedna konfiguracja MySQL

Apache Airflow opiera się na bardziej rygorystycznych ustawieniach SQL ANSI dla MySQL. W tym przypadku musimy określić explicit_defaults_for_timestamp = 1 w twoim pliku my.cnf w sekcji [mysqld].

Zrestartuj Airflow

Sprawdź, jaki jest bieżący PID dla Airflow-WebServer.

cat $AIRFLOW_HOME/airflow-webserver.pid
5023

Zabij aktualny proces:

sudo kill -9  {aktualny identyfikator procesu Airflow WebServer}
# W moim przypadku
sudo kill -9  5023

Zainicjuj nową bazę danych i zrestartuj airflow-webserver i airflow-scheduler.

-D – parametr ten uruchomi airflow-webserver i airflow-scheduler.jako działające usługi w tle.

airflow webserver -D
airflow scheduler -D

Jeśli spodobał Ci się ten post to napisz proszę komentarz poniżej oraz udostępnij ten post na swoim Facebook’u, Twitter’ze, LinkedIn lub innej stronie z mediami społecznościowymi.
Z góry dzięki!

Please follow and like us:

Dodaj komentarz

Close Menu
Social media & sharing icons powered by UltimatelySocial

Enjoy this blog? Please spread the word :)