Instalación y configuración de Airflow en Ubuntu Server 20

La primera vez que instalé Airflow por tutoriales en 1 hora. Se abrió bien desde el sitio, se veía bien, pero desafortunadamente no funcionó.





Me tomó otras 10-15 horas para una mayor reinstalación y depuración.





Estoy escribiendo este artículo en persecución, intentaré anotar todos los problemas que tuve que enfrentar. Algunas preguntas fueron respondidas solo en la página del 10º Google en inglés. Incluso en la versión en inglés de los manuales de Airflow, no hay información sobre todos los temas.





Para empezar, un hecho no obvio: cuando comienza a instalar Airflow, cree que será un solo programa. De hecho, este no es el caso en absoluto. Estos son 2 servicios:





  • airflow-webserver: responsable de la parte que ve en la interfaz web





  • programador de flujo de aire: responsable del lanzamiento de DAG y, en general, de la parte ETL





En consecuencia, debe configurarlos por separado. Si algo no funciona, el problema puede estar solo en uno de estos servicios, o quizás en ambos al mismo tiempo. La localización correcta del error ayudará a reducir el tiempo de depuración a la mitad. Para comprender qué ha caído, debe observar su estado:





systemctl status airflow-webserver
systemctl status airflow-scheduler
      
      



El registro del sistema también ayuda mucho: / var / log / syslog





Pero usaremos esto en la etapa de depuración, y primero necesitamos instalar todo.





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
      
      



Resultó que después de detener el servidor web de flujo de aire, gunicorn seguía funcionando, que ocupaba el puerto 8080 y mostraba la interfaz.





Después de matarlo por ID y reiniciar el servidor web, todo finalmente funcionó bien.





Parece que eso es todo. Si olvidó algo o todavía hay problemas durante la instalación, escriba, lo agregaré al artículo.








All Articles