Installation et configuration d'Airflow sur le serveur Ubuntu 20

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.








All Articles