반응형

1. 정리 목적

  • AirFlow에 대한 기본 개념을 살펴본다.
  • AirFlow의 기본 구성을 살펴본다.

 

2. AirFlow란?

  • AirFlow는 AirBnB에서 만든 Workflow management
  • Python 코드로 워크플로우(workflow)를 작성하고, 스케쥴링, 모니터링 하는 플랫폼
  • 스케쥴링을 하고 모니터링을 코드로 작성하기 때문에 더 세분화 할 수 있으므로, 더 정교화된 파이프라인을 구성 가능
  • 예약된 워크플로를 트리거 하고 실행 할 실행기에 Task을 제출하는 두가지를 모두 처리하는 스케줄러

 

2.1 Apache AirFlow를 사용하는 이유

  • 데이터 ETL (Extract, Transform, Load) 과정을 통해 데이터를 가공하며 적재
  • 작업을 정확한 시간과 방법, 순서대로 실행하게 해주는 오케스트레이터 역할
  • 장점
    1. Python으로 가능한 작업들을 Airflow 파이프라인에서 처리 가능 (Python code로 workflow 정의)
    2. 원하는 만큼의 다양한 Task들을 병렬적으로 실행 가능 (Kubernetes 클러스터, 분산 클러스터 환경에서도 파이프라이닝 가능
    3. 웹 인터페이스를 통한 데이터 파이프라인 모니터링으로 관리하기 편리
    4. Customizing 하기가 쉬움 (플러그인 설치 등)

 

2.2 Apache AirFlow의 기본 구성

  • User interface / Web Server 
    • Airflow는 설치 만으로 Web Server를 구성할 수 있음
    • Airflow의 웹 UI 서버
  • DAG Directory
    • Directed Acyclic Graph로 개발자가 Python으로 작성한 Workflow
    • 작업 스케쥴을 만들어주는 스케쥴링 단위를 작성한 DAG를 보관하는 장소
    • Python 코드로 작성한 Dag들을 여기에 보관
    • Task들의 dependency를 정의
  • Worker
    • 실제 Task를 실행하는 주체
    • Executor 종류에 따라 동작 방식이 다양함
  • Metadata Database
    • 실행할 Task의 관한 정보를 저장 (순서, 작업 스케쥴링 등)
    • Task Status (queued, scheduled, running, success, failed, etc) 저장
    • Airflow에 존재하는 DAG와 Task들의 메타데이터를 저장하는 데이터베이스
  • Scheduler
    • 모든 DAG와 Task 작업들을 모니터링, 관리하고 실행 순서와 상태 및 Task를 스케쥴링
  • Executor
    • 스케쥴러와 함께 동작하는 구성요소
    • Status가 queued인 Task를 확인하여 실제 어떤 리소스가 투입되어 실행 될 것인지 결정
    • Local Executor, Celery Executor, Kubernetes Executor 등이 있음

 

2.3 AirFlow DAG (Directed Acyclic Graph)

  • Airflow의 DAG는 실행하고 싶은 Task들의 관계와 dependency를 표현하고 있는 Task들의 모음
  • 어떤 순서와 어떤 dependency로 실행할지, 어떤 스케쥴로 실행할지 등의 정보를 가지고 있음
  • DAG를 정확하게 설정해야, Task를 원하는 대로 스케쥴링 가능

 

2.4 Airflow Operator

  • 각 Airflow DAG는 여러 Task로 이루어져있음
  • operator나 sensor가 하나의 Task로 만들어지며 Airflow는 기본적인 Task를 위해 다양한 operator를 제공
  • BashOperator : bash command를 실행
  • PythonOperator : Python 함수를 실행
  • EmailOperator : Email을 발송
  • MySqlOperator : sql 쿼리를 수행
  • Sensor : 시간, 파일, db row, 등등을 기다리는 센서

 

2.5 Airflow Executor

  • Worker의 동작이 Airflow Executor의 종류에 따라 달라짐
  • Executor는 Task를 실행하는 주체로, 다양한 종류가 있고 각각 다른 특징을 가지고 있음
  • Production에서 많이 사용되고 있는 Celery Executor는 Task를 메시지 브로커에 전달하고, Celery Worker가 Task를 가져가서 실행하는 방식
  • Worker 수를 스케일아웃 할 수 있다는 장점
  • 메시지 브로커를 따로 관리해야하고 워커 프로세스에 대한 모니터링도 필요하다는 단점

 

2.6 Apache Airflow의 구동 순서

  • DAG를 작성하여 Workflow를 작성 (DAG는 Task로 구성)
  • Task는 Operator가 인스턴스화 되어 있음
  • DAG를 실행 할 때 Scheduler는 DagRun 오브젝트를 구성함
  • DagRun 오브젝트는 Task Instance를 구성함
  • Worker가 Task를 수행 후 DagRun의 상태를 “완료”로 변환
  • webserver 구동 → folder DAGs 파일 받아 보여줌 →
    Scheduler에서 Folder DAGs를 보고 Metastore에 정보전달 DAGRun 생성 →
    DagRun에 해당하는 Task Instance 생성 및 Executor에 전달 → 
    Task가 다수인 경우 Metastor와 Task들의 처리 상태(진행, 건너뛰기, 완료 등)를 업데이트하면서 Execute 진행 → 
    완료 후 DagRun에 완료 상태 보내고 Scheduler에 완료 상태 업데이트 알린 뒤 종료

 

2.7 Airflow 시간 

  • start_date 와 schedule_interval
  • Airflow는 기본적으로 UTC 시간을 사용
  • Airflow 자체의 코드를 확인해보면 start_date는 python datetime object, schedule_interval은 cron으로 표현된것을
  • timedelta object로 변경하여 사용
  • start_date를 기준으로 schedule_interval을 더해가면서 DAG를 scheduling 하는 원리
  • start_date만 잘 표현해주면 한국시간 기준으로 schedule_interval을 작성 가능
  • DAG마다 한국 시간 Timezone을 명시 해줌으로 시간에 대한 큰 고민없이 DAG 코드를 작성
  • 하기 작성된 코드를 보면 2023년 1월 1일 오전 8시에 처음 실행된다고 생각할 수 있으나 실제로는 1월 2일 오전 8시에 처음 실행
import pendulum
from airflow import DAG
from datetime import datetime, timedelta
# 한국 시간 timezone 설정
kst = pendulum.timezone("Asia/Seoul")
# 한국 시간 2023년 1월 1일 시작, 오전 8시마다 실행되는 DAG 설정
dag = DAG(
    dag_id="test_dag",
    default_args=default_args,
    start_date=datetime(2023, 1, 1, tzinfo=kst),
    schedule_interval="0 8 * * *",
)

 

2.8 Airflow execution_date

  • Airflow에서 start_date는 실행 시작 날짜가 아니라 스케줄이 시작 되는 날짜
  • 상단 예제에서 1월 1일 부터 하루에 한 번씩 8시에 스케줄이 등록되고, 하루 뒤인 1월2일부터 execution_date가 1월 1일인 DAG가 실행
  • execution_date는 나중에 해당 DAG를 다시 실행해도 그대로 1월 1일로 유지되는 이 DAG고유 실행 Id 값
  • cron 과 같은 scheduler처럼 생각하면 이 execution_date가 헷갈릴 수 있음
  • execution_date가 1월 1일인 task의 경우 1월1일의 data를 가지고 ETL을 한다고 예상 가능
  • 1월1일 데이터는 1월2일이 되어야 모두 존재하기 때문에 Airflow는 이런 방식의 시간을 설정

 

✔ Workflow란?
- 작업 흐름이라는 뜻
- 가장 작은 단위인 Operator부터 Task, Dag, Workflow 순으로 정의 (Operators (Task) > DAGs > Workflow)

※ 참조 url :

- https://lsjsj92.tistory.com/631

 

Apache 에어플로우(Airflow) 시작하기 - Airflow란?, Airflow 설치 및 기본 예제

포스팅 개요 본 포스팅은 Apache Airflow(에어플로우)에 대해서 정리하는 Airflow 시리즈 포스팅입니다. Airflow 포스팅에서는 아래와 같은 순서로 Airflow에 대해서 정리해보려고 합니다. Airflow란 무엇인

lsjsj92.tistory.com

- https://magpienote.tistory.com/192

 

[Airflow 기본 내용] Airflow란? 구성요소, 구동원리, 개념, 용어 정리

Airflow란? airflow는 airbnb에서 만든 workflow를 만드는 오픈소스 프로젝트이다. python 코드로 워크플로우(workflow)를 작성하고, 스케쥴링, 모니터링 하는 플랫폼임. 스케쥴링을 하고 모니터링을 코드로

magpienote.tistory.com

 

반응형

+ Recent posts