책 & 스터디
데이터 파이프라인 핵심 가이드 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의 작업이 복잡한지
- 내부 데이터 및 시스템에 연결하는 것이 허용되는지에 따라 관리형 솔루션을 고려해볼 만 함