[Airflow] Airflow?

CHAN LIM·2024년 2월 15일
0

Airflow

목록 보기
1/4

Apache Airflow?

Python을 이용해
Workflow를 만들고 관리할 수 있는
Open-Source 기반 Workflow 관리 도구

작업(Task)을
정확한 시간에,
정확한 방법으로,
정확한 순서대로 실행하게 해주는 오케스트레이터

a.k.a

Workflow as code


특징

Dynamic

  • Airflow 파이프라인이 Python 코드로 구성되어 동적 파이프라인 생성이 가능합니다.

Extensive

  • Airflow™ 프레임워크에는 다양한 기술과 연결하는 연산자가 포함되어 있습니다. 모든 Airflow 구성요소는 확장 가능하여 환경에 맞게 쉽게 조정할 수 있습니다.

Flexible

  • Jinja 템플릿 엔진을 활용하여 워크플로 매개변수화가 내장되어 있습니다 .

다시 말해서,

  • Python으로 제작된 도구
  • 하나의 Workflow는 DAG (Directed Acycle Graph)
    • DAG 안에는 1개 이상의 Task가 존재
  • Task간 선/후행 연결이 가능하되, 순환되지 않고 방향성 소유
  • Cron 기반 스케쥴링
  • Monitoring 및 실패 작업에 대한 재실행 기능이 간편

동작 원리

  • Scheduler
    • 워크플로우를 스케쥴링하는 스케쥴러 데몬.
    • 모든 DAG와 태스크를 모니터링하고 관리하며, 주기적으로 실행해야 할 태스크를 찾고 해당 태스크를 실행 가능한 상태로 변경한다.
  • DAG Script
    • 개발자가 작성한 Python 워크플로우 스크립트
  • Web Server
    • 에어플로우 웹 인터페이스를 제공하는 웹 서버.
    • flask, gunicorn을 사용한다.
  • MetaStore
    • 어떤 DAG가 존재하고 어떤 태스크로 구성되는지, 어떤 태스크가 실행 중이고 실행 가능한 상태인지 등의 메타데이터가 저장되는 데이터베이스.
    • Postgresql를 추천하지만, mysql, sqlite도 사용 가능하다.
  • Executer
    • 어떤 환경에서 task가 실행될지에 대한 타입 정의. 태스크 인스턴스를 실행하는 주체로, 다양한 타입이 존재한다.
  • Worker
    • 실체 task를 처리하는 컴포넌트
  • Kerberos
    • 인증 처리를 위한 프로세스로 필수 사항은 아니다.

흐름


장점

  • Python 기반이므로, Python을 알고 있다면 적응하기 쉬움

  • 대규모 Workflow에 적합한
    (K8S 아키텍처)등 수평적 확장이 가능한 아키텍처 지원

  • Python의 방대한 라이브러리를 활용한 기능 지원
    즉, Python으로 할 수 있는 모든 작업을 할 수 있다.

  • Customizing


단점

  • 실시간 Workflow에 적합하지 않는다.

  • _DAG 개수가 많아지면 모니터링이 어려움

  • Workflow를 GUI에서 만들지 않아서 Coding이 요구됨


Code 예시

from airflow import DAG
import datetime
import pendulum
from airflow.operators.bash import BashOperator

with DAG(
    dag_id="dags_bash_operator",
    schedule="0 0 * * *",
    start_date=pendulum.datetime(2024, 1, 1, tz="Asia/Seoul"),
    catchup=False
) as dag:
    bash_t1 = BashOperator(
        task_id="bash_t1",
        bash_command="echo whoami",
    )

    bash_t2 = BashOperator(
        task_id="bash_t2",
        bash_command="echo $HOSTNAME",
    )

    # Task 수행 순서 설정
    bash_t1 >> bash_t2
profile
클라우드, 데이터, DevOps 엔지니어 지향 || 글보단 사진 지향

0개의 댓글