[AIRFLOW] Window환경에 Airflow 설치 및 Dag import 확인

NewNewDaddy·2023년 12월 5일
0

AIRFLOW

목록 보기
1/1
post-thumbnail

0. INTRO

  • Window 환경에 Airflow를 설치하려면 상당히 고역이다. 엄밀히 말하자면 윈도우 로컬 환경에 설치는 어렵기 때문에 WSL의 도움을 받아 설치를 하곤하는데 Docker-Compose를 사용하면 아주 간단하게 Webserver와 Postgres DB까지 같이 한 방에 설치가 가능하다.
  • 이번 글에서는 Docker-Compose를 사용하여 Airflow 환경을 구축하고 Airflow에서 Python 코드 흐름들에만 적용되는 taskflow API를 사용하여 간단한 Dag 하나를 작동시켜 볼 것이다.

1. Docker Compose를 사용한 Airlfow 환경 구축

  • Docs 참고 -> Running Airflow in Docker

  • Docker Compose YAML 파일 -> Airflow YAML

  • 위의 yaml 파일을 docker-compose.yaml에 저장 후 바로 실행해도 무방하지만 UI에 접속했을 때 예시 Dag들을 보여주는 AIRFLOW__CORE__LOAD_EXAMPLES 옵션을 false로 주고 설치를 해 볼 것이다.

    version: '3.8'
    x-airflow-common:
      &airflow-common
      .
      .
        AIRFLOW__CORE__LOAD_EXAMPLES: 'false'
  • 리눅스 명령어가 먹히도록 WSL 터미널로 접속한 후 아래 과정을 따라간다.

    1.설치 전 명령어 실행
    
      > mkdir -p ./dags ./logs ./plugins ./config
      > echo -e "AIRFLOW_UID=$(id -u)" > .env
    
    2. 생성된 .env 파일의 'AIRFLOW_UID' 변경
    
      > AIRFLOW_UID=50000
    
    3. Database 초기화
    
      > docker compose up airflow-init
    
    4. 초기화 완료 후 docker-compose.yaml 파일 실행
    
      > docker-compose up
  • docker-compose up 후 약간의 시간이 지나고 docker ps로 실행중인 컨테이너 목록들을 확인해본다. 아래와 같이 6개의 컨테이너들이 모두 running 상태이면 로컬에 airflow 설치가 완료된것이다.

    36ee9f84912a   apache/airflow:2.7.3   "/usr/bin/dumb-init …"   2 days ago     Up 2 hours (healthy)   8080/tcp                            airflow-airflow-worker-1
    36d1e01e3c68   apache/airflow:2.7.3   "/usr/bin/dumb-init …"   2 days ago     Up 2 hours (healthy)   8080/tcp                            airflow-airflow-triggerer-1
    13f680ae5c99   apache/airflow:2.7.3   "/usr/bin/dumb-init …"   2 days ago     Up 2 hours (healthy)   0.0.0.0:8080->8080/tcp              airflow-airflow-webserver-1
    495d12522c6e   apache/airflow:2.7.3   "/usr/bin/dumb-init …"   2 days ago     Up 2 hours (healthy)   8080/tcp                            airflow-airflow-scheduler-1
    b020a41c2646   redis:latest           "docker-entrypoint.s…"   2 days ago     Up 2 hours (healthy)   6379/tcp                            airflow-redis-1
    9294b2a1b2a2   postgres:13            "docker-entrypoint.s…"   2 days ago     Up 2 hours (healthy)   5432/tcp                            airflow-postgres-1

2. Airflow UI 접속 및 Dag 연동 확인

  • localhost:8080 으로 접속하면 airflow UI에 들어갈 수 있으며 ID : airflow / PW : airflow 를 입력하여 로그인 할 수 있다.

  • 따로 Dag 생성을 하지 않았기 때문에 첫 화면에 들어가면 아무런 Dag도 찾아볼 수 없다.

  • docker-compose.yaml 파일과 동일 경로에 dags, logs, plugins, config 이렇게 4가지 디렉토리가 생성된 것을 확인 할 수 있다.

  • dags 디렉토리에 샘플 Dag를 아래와 같이 하나 생성해서 저장한다.

    import pendulum
    from airflow import DAG
    from airflow.operators.dummy_operator import DummyOperator
    from airflow.operators.bash import BashOperator
    from airflow.operators.python_operator import PythonOperator, BranchPythonOperator
    
    from datetime import datetime
    
    # timezone 한국시간으로 변경
    kst = pendulum.timezone("Asia/Seoul")
    
    # 기본 args 생성
    default_args = {
        'owner' : 'Hyunsoo Lee',
        'email' : ['airflow@airflow.com'],
        'email_on_failure': False
    }    
    
    with DAG(
        dag_id='first_dag',
        default_args=default_args,
        start_date=datetime(2023, 12, 1, tzinfo=kst),
        description='Choosing Best Models',
        schedule_interval='@once',
        tags=['test'],
        catchup=False
        ):
    
        # python Operator에서 사용할 함수 정의
        def print_hello():
            print('hello world')
    
        t1 = DummyOperator(
            task_id='dummy_task_id',
            retries=5,
        )
    
        t2 = PythonOperator(
            task_id='Hello_World',
            python_callable=print_hello
        )
    
        t1 >> t2
    • 조금 기다리면 UI에 dag_id로 명시해둔 first_dag라는 이름의 dag가 하나 생성된 것을 확인할 수 있다.
profile
데이터 엔지니어의 작업공간 / #PYTHON #SPARK #AWS #NCLOUD

0개의 댓글