NIRVANA

[Apache Airflow] Apache Airflow 기반의 데이터 파이프라인 CH1 정리 본문

DataEngineering

[Apache Airflow] Apache Airflow 기반의 데이터 파이프라인 CH1 정리

녜잉 2024. 7. 24. 00:28

Airflow의 주요 기능 

  • 유연한 파이썬 프레임워크를 사용, 쉽게 데이터 파이프라인을 구축
  • 서로 다른 기술을 연결하는 다양한 빌딩 블록 제공 
  • 다양한 분산 시스템에서 발생하는 작업 조율 

 

1.1 데이터 파이프라인 소개 

데이터 파이프라인

원하는 결과를 얻기 위해 실행되는 여러 태스크 구성

 

1. 1. 1 데이터 파이프라인 그래프 

  • 데이터 파이프라인을 그래프로 표현하면 태스크 간의 의존성을 확인 가능
    • 해당 형태의 그래프는 방향성을 가지므로 방향성 그래프라고 하기도 함

날씨 대시보드 생성 파이프라인

  • 위와 같은 형태의 그래프를 일반적으로 방향성 비순환 그래프(Directed Acyclic Graph, DAG) 라고 부름
    • 그래프는 화살표 비방향성의 끝점을 포함하나, 반복이나 순환을 허용하지 않음
    • 순환 속성을 가지게 될 경우, 순환 의존성으로 인한 문제가 발생할 수 있으므로 비순환 속성은 순환 실행을 방지하는 역할을 수행, 주요한 역할을 맡게 됨
  • DAG의 비순환 속성은 태스크 그래프를 효율적으로 해결하고 실행하기 위해 사용됨 

 

1. 1. 2 파이프라인 그래프 실행 

DAG는 파이프라인 실행을 위한 단순한 알고리즘을 제공 

 

1) 그래프 안에 있는 태스크는 각각 개방된 상태(=미완료) 이며, 다음과 같은 단계를 수행

  • 각각의 화살표 끝점은 태스크를 향하며, 다음 태스크로 향하기 전에 이전 태스크가 완료되었는지 확인
  • 태스크가 완료되면 다음에 실행해야 할 태스크를 대기열에 추가

2) 실행 대기열에 있는 태스크를 실행하고, 태스크 수행이 완료되면 완료로 표시

3) 그래프의 모든 태스크가 완료될 때까지 1단계로 돌아감 

 

각 태스크의 의존성 문제가 해결되지 않으면(즉, 태스크가 완료되지 않으면) 그 다음 태스크를 실행 대기열에 추가하지 않고, 현재 해결하는 태스크만을 실행 대기열에 추가 

 

1. 1. 3  그래프 파이프라인과 절차적 스크립트 파이프라인 비교 

  • 그래프 파이프라인 표현(DAG사용 표현)이 태스크와 태크스 사이에 대한 의존성을 직관적으로 설명하지만, 간단한 스크립트를 사용하여 각 태스크를 선형 체인 형태로 실행하는 것도 가능 
  • 그래프 파이프라인에 실행 알고리즘을 적용하면 태스크를 병렬로 실행할 수 있으므로 리소스를 더 효율적으로 사용 가능 
    • 태스크를 순차적으로 실행(선형 체인 형태)하는 것 보다 전체 파이프라인 실행 시간 줄이기 가능 
  • 그래프 기반 표현은 전체 작업을 하나의 모놀리식 스크립트(혹은 프로세스)로 구성하는 것이 아닌, 파이프라인을 작은 점진적인 태스크 형태로 분리 가능
    • 모놀리식 스크립트의 경우 중간 태스크가 실패하면 전체 스크립트를 재실행
    • 그래프 기반 표현에서는 실패한 태스크와 그 이후 태스크만 재실행 

 


 

1. 2 Airflow 소개

1. 2. 1 파이썬 코드로 유연한 파이프라인 정의 

  • Airflow를 사용하면 파이프라인이나 워크플로 태스크를 비순환 그래프(DAG)로 정의 가능 
  • Airflow는 파이썬 스크립트로 DAG 구조를 설명하고 구성 
    • DAG 파일 안에 파이썬 코드를 사용, DAG를 정의 
  • DAG 파일은 주어진 DAG에 대한 태스크 집합과 태스크 간의 의존성을 기술
    • 이외에도 Airflow 실행 방법과 시간 등을 정의한 몇가지 추가 메타 데이터 포함될 수 있음 
  • Airflow는 DAG 구조를 식별하기 위해 코드를 파싱 
  •  Airflow DAG를 파이썬 코드로 정의함으로써 DAG를 구성하는데 많은 유연성 제공 가능 

 

1. 2 파이프라인 스케줄링 및 실행 

DAG로 파이프라인 구조를 정의한 후, Airflow가 파이프라인을 언제 실행한 것인지 각각의 DAG의 실행 주기 정의 가능 

  • Airflow가 매시간, 매일, 매주 등 DAG를 실행하거나 cron과 같은 표현식으로 더 복잡한 스케줄 사용 가능 

 

 Airflow의 주요 구성 요소 

  • Airflow 스케줄러 - DAG를 분석하고 현재 시점에서DAG의 스케줄이 지난 경우 Airflow 워커에 DAG의 태스크를 예약
  • Airflow 워커 - 예약된 태스크를 선택 및 실행
  • Airflow 웹 서버 - 스케줄러에서 분석한 DAG를 시각화하고 DAG 실행 결과를 확인할 수 있는 주요 인터페이스를 제공 

Airflow 스케줄러는 파이프라인이 실행되는 시기와 방법을 결정하는 요소이므로 Airflow의 핵심 기능이 됨 

 

스케줄러 작업 단계

1) 사용자가 DAG 워크플로를 작성

2) 스케줄가  DAG파일을 분석하고 각 DAG 태스크의 의존성 및 예약 주기를 확인

3) 마지막 DAG까지 내용 확인 후 DAG의 예약 주기가 경과했는지 확인 

4) 예약 주기가 현재 시간 이전이라면 실행 되도록 예약

5) 예약된 각 태스크에 대해 스케줄가 해당 태스크의 의존성을 확인, 의존성 태스크가 완료되지 않았다면 실행 대기열에 추가

6) 다시 1단계로 돌아가서 새로운 루프 전까지 대기 

 

Airflow를 이용하여 DAG 파이프라인을 개발하고 실행하는 과정 개요

  • 태스크가 실행 대기열에 추가 되면 Airflow 워커 풀(pool)안의 워커가 태스크를 서택하고 실행
  • 이때, 실행은 병렬로 수행되고 실행 결과는 지속적으로 추적됨
  • 과정의 모든 결과는 Airflow의 메타스토어로 전달 되어 사용자가 Airflow의 웹 인터페이스를 통해 태스크 진행 상황 추적 및 로그 확인 가능 

 

1. 2. 3 모니터링과 실패 처리 

  • 기본적으로 Airflow는 태스크 실패 시, 재시도 가능하므로 오류 발생시에 태스크 복구 가능
  • 재시도가 실패하면 Airflow는 태스크가 실패했음을 기록하고 사용자에게 실패를 통보
  • 트리 뷰를 통해 실패한 태스크를 보고 로그를 확인할 수 있으므로 디버깅을 쉽게 할 수 있음 

 

1. 2. 4 점진적 로딩 및 백필 

  • Airflow 스케줄러는 DAG에 정의된 특정 시점에 트리거하고, 최종 시점과 예상되는 다음 스케줄 주기를 상세하게 알려줌
    • 이를 통해 파이프라인에서 각 DAG는 매번 전체 데이터 세트를 다시 처리할 필요 없이 해당 시간 슬롯에 대한 데이터만 처리 
  • 위의 기능을 통해 과거 특정 기간에 대해 DAG를 실행하여 새로운 데이터르 세트를 손쉽게 생성하거나 백필할 수 있음 
    • 과거의 실행 결과를 삭제한 다음, 태스크 코드를 변경한 후에 삭제된 과거 태스크를 쉽게 재실행할 수 있음