Ubuntu Server20へのAirflowのインストールと構成

初めてAirflowをチュートリアルで1時間でインストールしました。サイトからは問題なく開き、見栄えも良かったのですが、残念ながら機能しませんでした。





さらに再インストールしてデバッグするのにさらに10〜15時間かかりました。





私はこの記事を熱心に書いています。私が直面しなければならなかったすべての問題に注意を向けようとします。いくつかの質問は、10番目の英語のGoogleのページでのみ回答されました。Airflowマニュアルの英語版でも、すべての問題に関する情報はありません。





手始めに、明らかな事実:エアフローのインストールを開始すると、それは1つのプログラムになると思います。実際、これはまったく当てはまりません。これらは2つのサービスです:





  • airflow-webserver-Webインターフェースに表示される部分を担当します





  • airflow-scheduler-DAGの起動を担当し、一般にETL部分を担当します





したがって、それらを個別に構成する必要があります。何かが機能しない場合、問題はこれらのサービスの1つだけにあるか、同時に両方にある可能性があります。エラーを正しくローカライズすると、デバッグ時間を半分に短縮できます。何が落ちたのかを理解するには、それらのステータスを確認する必要があります。





systemctl status airflow-webserver
systemctl status airflow-scheduler
      
      



システムログも大いに役立ちます:/ var / log / syslog





ただし、これはデバッグ段階で使用し、最初にすべてをインストールする必要があります。





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
      
      



airflow-webserver gunicornを停止した後も実行されたままであり、ポート8080を占有し、インターフェイスをレンダリングしたことが判明しました。





IDで彼を殺し、Webサーバーを再起動した後、すべてがようやく正常に機能しました。





それだけのように見えます。何かを忘れた場合、またはインストール中にまだ問題がある場合は、書き込み、記事に追加します。








All Articles