Setting up Apache-Airflow in Windows using WSL2

Page content

개요

  • Windows WSL2에서 airflow를 설치한다.

Step 1. Install pip on WSL

  • airflow를 설치하기 위해 pip를 설치한다.
$ sudo apt install python3-pip
[sudo] password for username:

Step 2. Install virtualenv package

  • virtualenv 라이브러리를 설치한다.
$ sudo pip3 install virtualenv

Step 3. Create a virtual environment

  • C드라이브에 airflow-test 폴더를 생성한다.
    • 해당 디렉터리로 이동한다.
  • 이제 가상환경을 생성한다.
$ virtualenv venv
  • 가상환경에 접속을 한다.
$ source venv/bin/activate
  • 이번에는 .bashrc 파일을 수정한다.
$ vi ~/.bashrc
  • 파일을 연 후, 다음과 같은 코드를 추가한다.
export AIRFLOW_HOME=/mnt/c/airflow-test
  • 파일을 닫을 때는 ESC → :wq 순서대로 작성한다.
  • 수정된 코드를 업데이트 하기 위해서는 아래와 같이 반영한다.
$ source ~/.bashrc
  • 실제로 코드가 반영되었는지 확인하기 위해서는 다음과 같이 확인해본다.
echo $AIRFLOW_HOME
/mnt/c/airflow-test

Step 4. Apache Airflow 설치

  • PostgreSQL, Slack, Celery 패키지를 동시에 설치하는 코드를 작성한다.
$ pip3 install 'apache-airflow[postgres, slack, celery]'
  • 에어플로 실행 위해 DB 초기화를 해줘야 한다.
$ airflow db init
  • 실제로 잘 구현이 되었는지 확인하기 위해 webserver를 실행한다.
$ airflow webserver -p 8081
  • 다음으로 일정 주기로 데이터 흐름이 실행되게 하려면 Scheduler가 필요하다.
$ airflow scheduler

Untitled

  • 그런데, 여기에서 문제는 username을 생성하지 않았다. 따라서, username을 추가하도록 한다.
# $ airflow users create --username admin --password your_password --firstname your_first_name --lastname your_last_name --role Admin --email your_email@some.com
$ airflow users create --username airflow --password airflow --firstname evan --lastname airflow --role Admin --email your_email@some.com
  • 그리고, 다시 Webserver와 Scheduler를 동시에 실행한다. 로그인 화면에서 로그인을 진행하면 정상적으로 다양한 DAGs 파일이 나타난 것을 확인할 수 있다.

Untitled

Default 예제 제거하기

  • 만약에 load_examples를 없애고 싶다면 어떻게 해야할까?
  • 먼저, airflow.cfg 파일을 열고, load_examples = True 로 되어 있는 것을 load_examples = False 로 변경한다.

cfg.png

  • 그 후에, 다시 터미널로 돌아와서 airflow db reset 실행한다. Proceed? y 선택
$ airflow db reset
/mnt/c/airflow-test/venv/lib/python3.8/site-packages/airflow/configuration.py:276: DeprecationWarning: distutils Version classes are deprecated. Use packaging.version instead.
  if StrictVersion(sqlite3.sqlite_version) < StrictVersion(min_sqlite_version):
DB: sqlite:////mnt/c/airflow-test/airflow.db
This will drop existing tables if they exist. Proceed? (y/n)
.
.
.
INFO  [alembic.runtime.migration] Running upgrade 7b2661a43ba3 -> be2bfac3da23, Add has_import_errors column to DagModel
INFO  [alembic.runtime.migration] Running upgrade be2bfac3da23 -> c381b21cb7e4, add session table to db
INFO  [alembic.runtime.migration] Running upgrade c381b21cb7e4 -> 587bdf053233, adding index for dag_id in job
WARNI [airflow.models.crypto] empty cryptography key - values will not be stored encrypted.
INFO  [airflow.models.dagbag.DagBag] Filling up the DagBag from /mnt/c/airflow-test/dags
  • 이제 webserver 를 다시 실행한다.
    • 새로운 로그인 화면이 나오는 것이 정상이다.
$ airflow webserver -p 8080

Untitled

  • 이제 접속하면 아래와 같이 아무런 예제가 떠오르지 않는것을 확인할 수 있다.

Untitled