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 워커 풀(pool)안의 워커가 태스크를 서택하고 실행
- 이때, 실행은 병렬로 수행되고 실행 결과는 지속적으로 추적됨
- 과정의 모든 결과는 Airflow의 메타스토어로 전달 되어 사용자가 Airflow의 웹 인터페이스를 통해 태스크 진행 상황 추적 및 로그 확인 가능
1. 2. 3 모니터링과 실패 처리
- 기본적으로 Airflow는 태스크 실패 시, 재시도 가능하므로 오류 발생시에 태스크 복구 가능
- 재시도가 실패하면 Airflow는 태스크가 실패했음을 기록하고 사용자에게 실패를 통보
- 트리 뷰를 통해 실패한 태스크를 보고 로그를 확인할 수 있으므로 디버깅을 쉽게 할 수 있음
1. 2. 4 점진적 로딩 및 백필
- Airflow 스케줄러는 DAG에 정의된 특정 시점에 트리거하고, 최종 시점과 예상되는 다음 스케줄 주기를 상세하게 알려줌
- 이를 통해 파이프라인에서 각 DAG는 매번 전체 데이터 세트를 다시 처리할 필요 없이 해당 시간 슬롯에 대한 데이터만 처리
- 위의 기능을 통해 과거 특정 기간에 대해 DAG를 실행하여 새로운 데이터르 세트를 손쉽게 생성하거나 백필할 수 있음
- 과거의 실행 결과를 삭제한 다음, 태스크 코드를 변경한 후에 삭제된 과거 태스크를 쉽게 재실행할 수 있음