책 & 스터디

데이터 파이프라인 핵심 가이드 7챕터 요약

haong_ 2022. 8. 3. 11:32

7. 파이프라인 오케스트레이션 

오케스트레이션은 파이프라인의 단계가 올바른 순서로 실행되고 단계 간의 종속성이 적절하게 관리되게 한다. 

방향성 비순환 그래프 DAG(Directed Acyclic Graph)

  • 연결 방향이 존재하고 순회하지 않는 그래프.
  • 한 작업이 완료된 이후에 다음 작업이 실행되며, 이전 작업으로 돌아가지 않는다. 

아파치 에어플로우 

  • 상호 종속성이 있는 여러 작업을 포함하는 워크플로(특히 데이터파이프라인)를 모니터링.
  • 파이썬으로 빌드되었지만 모든 언어 / 플랫폼에서 실행되는 작업을 실행 가능.
  • 데이터베이스를 사용하여 DAG의 실행 기록, 에어플로우 구성과 관련된 메타데이터를 저장.
    • 기본적으로 SQLite를 사용하지만, 대규모 요구사항의 경우 MySQL 또는 Postgres를 사용하는 것이 좋다.
    • sql alchemy를 사용하여 데이터베이스를 사용하도록 쉽게 재구성 할 수 있다.
    • SQL을 사용해 데이터 쿼리 가능 -> 파이프라인 성능을 분석하는 데 좋다.
  • DAG는 파이썬 스크립트로 정의하며, 소스 파일은 작업의 일정과 정의, 작업 간의 종속성 등을 기술한다.

에어플로우 실행기(Executors)

  • 기본적으론 SequentialExecutor 사용되지만, 한 번에 하나의 작업만 실행 할 수 있어 프로덕션용으로 비적합. SQLite DB와 호환되는 유일한 실행 프로그램.
  • CeleryExecutor, DaskExecutor, KubernetesExecutor와 같은 다른 실행기를 사용하는 것이 좋음

연산자(Operator)

  • DAG에서 각 노드는 하나의 작업
  • 각 작업은 연산자를 구현하며, 연산자는 스크립트, 명령 및 기타 작업을 실행

DAG 구축

데이터베이스에서 데이터를 추출하여 데이터 웨어하우스에 로드한 다음 데이터 모델로 변환

from datetime import timedelta
from airflow import DAG
from airflow.operators.bash_operator \
    import BashOperator
from airflow.utils.dates import days_ago

dag = DAG(
    'simple_dag',
    description='A simple DAG',
    schedule_interval=timedelta(days=1), # 첫 번째 실행은 현재 날짜보다 하루 전 -> 즉시 실행됨
    start_date = days_ago(1),
)

t1 = BashOperator(
    task_id='print_date',
    bash_command='date',
    dag=dag,
)

t2 = BashOperator(
    task_id='sleep',
    depends_on_past=True,
    bash_command='sleep 3',
    dag=dag,
)

t3 = BashOperator(
    task_id='print_end',
    start_date = days_ago(1),
    depends_on_past=True,
    bash_command='echo \'end\'',
    dag=dag,
)


# 작업 간의 종속성을 정의 t1 완료 후 t2 실행
t1 >> t2
t2 >> t3
  • PythonOperator로 파이썬 코드를 실행하려면 코드를 DAG 정의 파일에 작성하거나, DAG 정의 파일로 가져와야 함
  • 예제에서는 오케스트레이션과 오케스트레이션이 실행되는 프로세스의 로직을 분리, BashOperator를 사용
    • 코드 간에 호환되지 않는 파이썬 라이브러리의 잠재적인 문제를 피할 수 있음

DAG를 분할해야 하는 경우

  • 작업을 다른 일정으로 실행해야 하는 경우
    • 매일 한 번의 작업 / 30분마다 한 번씩 실행해야 하는 작업
  • 파이프라인이 관련이 없고 독립적인 경우
    • DAG가 너무 복잡해지면 논리적으로 분리 할 수 있는지 여부 결정

센서로 여러 DAG 조정 

  • 외부 작업 또는 프로세스의 상태를 확인한 다음, 확인 기준이 충족되면 DAG에서 다운스트림 종속성을 계속 실행
  • DAG는 특정 일정에 따라 실행되므로 센서가 특정 DAG의 실행을 확인해야 함

관리형 에어플로우 옵션

  • 완전 관리형으로 제공, 구글 클라우드의 Cloud Composer와 Astronomer가 있음
  • 요금은 높아지지만 에어플로우의 관리 편의성이 높아짐
  • 자체 호스팅을 도와줄 수 있는 시스템 운영 팀이 있는지
    • 예산이 어느 정도인지
    • DAG의 작업이 복잡한지
    • 내부 데이터 및 시스템에 연결하는 것이 허용되는지에 따라 관리형 솔루션을 고려해볼 만 함