初めて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サーバーを再起動した後、すべてがようやく正常に機能しました。
それだけのように見えます。何かを忘れた場合、またはインストール中にまだ問題がある場合は、書き込み、記事に追加します。