Installieren und Konfigurieren von Airflow unter Ubuntu Server 20

Das erste Mal, dass ich Airflow anhand von Tutorials in 1 Stunde installiert habe. Es öffnete sich gut von der Seite, sah gut aus, aber leider hat es nicht funktioniert.





Ich brauchte weitere 10-15 Stunden für die weitere Neuinstallation und das Debuggen.





Ich schreibe diesen Artikel in Verfolgung, ich werde versuchen, alle Probleme zu notieren, mit denen ich konfrontiert war. Einige Fragen wurden nur auf der Seite des 10. englischen Google beantwortet. Selbst in der englischen Version der Airflow-Handbücher gibt es nicht zu allen Themen Informationen.





Für den Anfang eine nicht offensichtliche Tatsache: Wenn Sie mit der Installation des Luftstroms beginnen, denken Sie, dass es sich um ein Programm handelt. In der Tat ist dies überhaupt nicht der Fall. Dies sind 2 Dienste:





  • airflow-webserver - verantwortlich für den Teil, den Sie in der Weboberfläche sehen





  • Luftstromplaner - verantwortlich für den Start von DAGs und im Allgemeinen für den ETL-Teil





Dementsprechend müssen Sie sie separat konfigurieren. Wenn etwas nicht funktioniert, liegt das Problem möglicherweise nur bei einem dieser Dienste oder bei beiden gleichzeitig. Durch die korrekte Lokalisierung des Fehlers kann die Debugging-Zeit halbiert werden. Um zu verstehen, was gefallen ist, müssen Sie sich ihren Status ansehen:





systemctl status airflow-webserver
systemctl status airflow-scheduler
      
      



Das Systemprotokoll hilft auch sehr: / var / log / syslog





Aber wir werden dies in der Debugging-Phase verwenden, und zuerst müssen wir alles installieren.





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
      
      



Es stellte sich heraus, dass nach dem Stoppen des Luftstrom-Webservers das Gunicorn weiter lief, das Port 8080 besetzte und die Schnittstelle renderte.





Nachdem ich ihn durch ID getötet und den Webserver neu gestartet hatte, funktionierte endlich alles einwandfrei.





Sieh aus, als wäre es das. Wenn Sie etwas vergessen haben oder während der Installation immer noch Probleme auftreten - schreiben Sie, ich werde es dem Artikel hinzufügen.








All Articles