La première fois que j'ai installé Airflow par des tutoriels en 1 heure. Il s'est bien ouvert à partir du site, avait l'air bien, mais malheureusement cela n'a pas fonctionné.
Il m'a fallu encore 10 à 15 heures pour une réinstallation et un débogage supplémentaires.
J'écris cet article à la poursuite, j'essaierai de noter tous les problèmes auxquels j'ai dû faire face. Certaines questions ont été répondues uniquement sur la page du 10e Google anglais. Même dans la version anglaise des manuels Airflow, il n'y a pas d'informations sur tous les problèmes.
Pour commencer, un fait non évident: lorsque vous commencez à installer Airflow, vous pensez que ce sera un programme. En fait, ce n'est pas du tout le cas. Ce sont 2 services:
airflow-webserver - responsable de la partie que vous voyez dans l'interface Web
airflow-scheduler - responsable du lancement des DAG et, en général, de la partie ETL
En conséquence, vous devez les configurer séparément. Si quelque chose ne fonctionne pas, le problème peut être uniquement dans l'un de ces services, ou peut-être dans les deux à la fois. Une localisation correcte de l'erreur aidera à réduire de moitié le temps de débogage. Pour comprendre ce qui est tombé, vous devez regarder leur statut:
systemctl status airflow-webserver systemctl status airflow-scheduler
Le journal système aide également beaucoup: / var / log / syslog
Mais nous allons l'utiliser au stade du débogage, et nous devons d'abord tout installer.
Airflow - , . . ubuntu pip - .
python 3. .
:
apt update
apt install software-properties-common
add-apt-repository ppa:deadsnakes/ppa
apt install python3.8
, :
python3 ––version
pip
apt install python3-pip
Airflow
Airflow ,
export AIRFLOW_HOME=~/airflow/
- root, , , .
, Airflow:
pip3 install apache-airflow
:
airflow-webserver.pid - web-,
airflow.cfg - Airflow, -
airflow.db - SQLite - .
unittests.cfg
webserver_config.py
, Airflow :
mkdir dags
, . , airflow /. - - .
airflow.cfg dags_folder
- - :
systemctl start airflow-webserver
systemctl start airflow-scheduler
- - 8080 ip .
, , postgress:
PostgresSQL Airflow
PostgreSQL:
apt-get install postgresql
postgres. :
sudo -u postgres psql
Airflow:
postgres=# create database airflow_metadata;
postgres=# CREATE USER airflow WITH password 'password';
postgres=# grant all privileges on database airflow_metadata to airflow;
Airflow :
airflow.cfg
sql_alchemy_conn
postgresql+psycopg2://airflow:password@localhost/airflow_metadata
psycopg2, , - , :
pip3 install psycopg2-binary
:
airflow initdb
- - :
systemctl restart airflow-webserver
systemctl restart airflow-scheduler
Airflow, web-:
airflow users create --username AirflowAdmin --firstname name1 --lastname name2 --role Admin --email airflow@airflow.com
.
- ,
airflow , home root, - .
- airflow.
root - airflow - , root - - .
airflow root, airflow.
grep root ./*
- .
/usr/lib/systemd/system , :
airflow-webserver.service
[Unit]
Description=Airflow webserver daemon
After=network.target postgresql.service mysql.service redis.service rabbitmq-server.service
Wants=postgresql.service mysql.service redis.service rabbitmq-server.service
[Service]
EnvironmentFile=/etc/sysconfig/airflow
User=airflow
Group=airflow
Type=simple
ExecStart=/usr/local/bin/airflow webserver --pid /airflow/airflow-webserver.pid
Restart=on-failure
RestartSec=5s
PrivateTmp=true
[Install]
WantedBy=multi-user.target
--pid /airflow/airflow-webserver.pid , airflow-webserver.pid - .
airflow-scheduler.service
[Unit]
Description=Airflow scheduler daemon
After=network.target postgresql.service mysql.service redis.service rabbitmq-server.service
Wants=postgresql.service mysql.service redis.service rabbitmq-server.service
[Service]
EnvironmentFile=/etc/sysconfig/airflow
User=airflow
Group=airflow
Type=simple
ExecStart=/usr/local/bin/airflow scheduler
Restart=always
RestartSec=10s
[Install]
WantedBy=multi-user.target
:
/etc/sysconfig/ airflow - AIRFLOW_CONFIG AIRFLOW_HOME
:
daemon-reload
systemctl restart airflow-scheduler
systemctl restart airflow-webserver
: Airflow. "login failed".
, - , - , .
(/var/log/syslog):
, , .
, , :
systemctl status airflow-webserver
airflow-webserver.service - Airflow webserver daemon
Loaded: loaded (/lib/systemd/system/airflow-webserver.service; enabled; vendor preset: enabled)
Active: activating (auto-restart) (Result: exit-code) since Tue 2021-03-16 18:00:03 MSK; 2s ago
Process: 761523 ExecStart=/usr/local/bin/airflow webserver --pid /run/airflow/webserver.pid (code=exited, status=1/FAILURE)
Main PID: 761523 (code=exited, status=1/FAILURE)
Mar 16 18:00:03 digitalberd systemd[1]: airflow-webserver.service: Main process exited, code=exited, status=1/FAILURE
Mar 16 18:00:03 digitalberd systemd[1]: airflow-webserver.service: Failed with result 'exit-code'.
8080 Airflow , .
, : systemctl stop airflow-webserver: , , 8080 -.
? , :
lsof -i tcp:8080
il s'est avéré qu'après l'arrêt du serveur Web, le gunicorn restait en marche, ce qui occupait le port 8080 et rendait l'interface.
Après l'avoir tué par ID et redémarré le serveur Web, tout a finalement bien fonctionné.
On dirait que c'est ça. Si vous avez oublié quelque chose ou s'il y a encore des problèmes lors de l'installation - écrivez, je l'ajouterai à l'article.