해당 포스트는 "Apache Airflow 기반의 데이터 파이프라인" 책을 참고하여 작성되었음을 밝힙니다.
Apache Airflow 기반의 데이터 파이프라인
데이터 파이프라인
- 데이터 파이프라인은 원하는 결과를 얻기 위해 실행되는 여러 태스크(Task) 또는 동작으로 구성된다.
- Ex.) 실시간 날씨 대시보드 구현을 위한 단계별 태스크
- 날씨 API를 통한 일기 예보 데이터 가져오기
- 서비스 목적에 부합한 데이터 정제 및 변환 (화씨 -> 섭씨 등)
- 변환된 데이터 날씨 대시보드로 전송
- 서로 다른 태스크는 정해진 순서대로 진행되어야 한다.
- 그 이유로, 사용할 데이터를 가져오기 전에 변환 시도는 의미가 없으며, 변환되지 않은 데이터를 전송해선 안되기 때문이다.
- 따라서 프로세스 실행 시, 암묵적으로 정해진 태스크 순서대로 실행되는 지 확인이 필요하다.
데이터 파이프라인 그래프
- 태스크 간의 의존성을 확인하는 방법으로 데이터 파이프라인 그래프로 표현하는 것이다.
- 해당 그래프에서 태스크는 노드로 표현되고, 태스크 간의 의존성은 방향을 가진 간선으로 표현된다.
- 따라서 방향성 그래프 (Directed Graph)라고도 한다.
그림 1. 날씨 대시보드를 위한 파이프라인 그래프적 표현
- 이러한 그래프는 일반적으로 방향성 비순환 그래프(Directed Acyclic Graph; DAG)라고 부른다.
- 화살표 방향성의 끝점(Directed Edge)을 포함하되 반복이나 순환은 허용하지 않음
파이프라인 그래프 실행
DAG의 파이프라인 실행을 위한 단계별 알고리즘
- 그래프 안에 태스크는 각각 개방된 상태이며 다음과 같은 단계를 수행함
- 각각의 화살표 끝점은 태스크를 향하며 다음 태스크로 향하기 전, 이전 태스크 수행 완료를 확인함 (1단계)
- 태스크가 완료되면 다음에 실행해야 할 태스크를 대기열에 추가함
- 실행 대기열에 있는 태스크를 확인하고, 완료 시 완료 표시함
- 그래프의 모든 태스크가 완료될 때까지 1단계로 돌아감
Airflow 소개
- 여러 워크플로 관리자와 마찬가지로 Airflow를 사용하면 파이프라인이나 워크플로 태스크를 방향성 비순환 그래프로 정의가 가능하다.
- Airflow는 Python 스크립트로 DAG의 구조를 설명하고 구성한다.
- 따라서 각 DAG 파일은 주어진 DAG에 대한 태스크 집합과 태스크 간의 의존성을 기술하고, Airflow는 DAG 구조를 식별하기 위해 코드를 파싱(Parsing)한다.
- Airflow로 여러 시스템 간에 데이터 프로세스를 결합할 수 있는 복잡한 데이터 파이프라인을 구축할 수 있다.
파이프라인 스케줄링 및 실행
- Airflow 스케줄러 : DAG를 분석하고 현재 시점에서 DAG의 스케줄이 지난 경우 Airflow 워커에 DAG의 태스크를 예약함
- Airflow 워커 : 예약된 태스크를 선택하고 실행함
- Airflow 웹 서버 : 스케줄러에서 분석한 DAG를 시각화하고 DAG 실행과 결과를 확인할 수 있는 주요 인터페이스를 제공함
그림 2. Airflow 주요 구성 요소에 대한 개요 (Ex. Airflow 웹 서버, 스케줄러, 워커)
- 태스크가 대기열이 추가되면 Airflow 워커의 풀(Pool)의 워커가 태스크를 선택하고 실행한다.
- 이때 실행은 병렬로 수행되고, 실행 결과는 지속적으로 추적된다.
- 이 과정의 모든 결과는 Airflow의 메타스토어로 전달되어, 사용자가 Airflow의 웹 인터페이스를 통해 테스크 진행 상황을 추적하고 로그를 확인한다.