Menginstal dan Mengonfigurasi Airflow di Ubuntu Server 20

Pertama kali saya menginstal Airflow dengan tutorial dalam 1 jam. Itu dibuka dengan baik dari situs, tampak bagus, tetapi sayangnya tidak berhasil.





Saya membutuhkan waktu 10-15 jam lagi untuk penginstalan ulang dan debugging lebih lanjut.





Saya menulis artikel ini dalam pengejaran, saya akan mencoba mencatat semua masalah yang harus saya hadapi. Beberapa pertanyaan hanya dijawab pada halaman di Google Bahasa Inggris ke-10. Bahkan dalam manual Airflow versi bahasa Inggris, tidak ada informasi tentang semua masalah.





Sebagai permulaan, fakta yang tidak jelas: ketika Anda mulai memasang aliran udara, Anda mengira itu akan menjadi satu program. Faktanya, ini sama sekali tidak terjadi. Ini adalah 2 layanan:





  • airflow-webserver - bertanggung jawab atas bagian yang Anda lihat di antarmuka web





  • airflow-scheduler - bertanggung jawab untuk meluncurkan DAG dan, secara umum, untuk bagian ETL





Karenanya, Anda perlu mengkonfigurasinya secara terpisah. Jika ada yang tidak berfungsi, masalahnya mungkin hanya di salah satu layanan ini, atau mungkin di keduanya pada saat yang bersamaan. Pelokalan yang benar dari kesalahan akan membantu mempersingkat waktu debugging menjadi setengahnya. Untuk memahami apa yang telah jatuh, Anda perlu melihat status mereka:





systemctl status airflow-webserver
systemctl status airflow-scheduler
      
      



Log sistem juga banyak membantu: / var / log / syslog





Tetapi kami akan menggunakan ini pada tahap debugging, dan pertama-tama kami perlu menginstal semuanya.





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
      
      



ternyata setelah berhenti webserver aliran udara gunicorn tetap berjalan, yang menempati port 8080 dan membuat antarmuka.





Setelah membunuhnya dengan ID dan memulai ulang server web, semuanya akhirnya berfungsi dengan baik.





Sepertinya begitu. Jika Anda lupa sesuatu atau masih ada masalah saat instalasi - tulis, saya akan menambahkannya ke artikel.








All Articles