Data Engineering/AirFlow

[Airflow] 1-2. Apache Airflow 살펴보기

쟈누이 2023. 11. 13. 22:49
반응형

2. Airflow 소개

2.1 파이썬 코드로 유연한 파이프라인 정의

  • 파이프라인(워크플로, 태스크)를 방향성 비순환 그래프(DAG) 로 정의 가능
  • 파이썬 스크립트로 DAG 의 구조를 설명하고 구성
  • DAG 파일은 주어진 DAG 에 대한 태스크 집합과 태스크 간의 의존성을 기술하고,
  • Airflow 는 DAG 구조를 식별하기 위해 코드를 파싱
  • 프로그래밍(파이썬) 접근 방식이 DAG를 구성하는데 많은 유연성 제공
  • 외부 DB, 오픈소스 및 클라우드 서비스에서 태스크를 실행할 수 있도록 확장 기능이 계속 개발중
  • 여러 시스템 간에 결합/연결이 가능한 복잡한 데이터 파이프라인을 구축 가능

2.2 파이프라인 스케줄링 및 실행

  • 파이프라인을 언제 실행할 것인지 각각의 DAG 실행주기 정의 가능
  • 이를 통해 Airflow 가 cron 과 같은 표현식으로 더 복잡한 스케줄 사용 가능
  • Airflow 주요 구성요소 세가지
    • Airflow 스케줄러 : DAG 를 분석, DAG와 태스크 관리 및 워커에 DAG 의 태스크 예약
    • Airflow 워커 : 예약된 태스크를 선택하고 실행
    • Airflow 웹 서버 : DAG를 시각화하고 DAG 실행과 결과를 확인 위한 UI 제공
  • 스케줄러는 아래와 같은 단계를 통해 작업을 진행
    1. 사용자가 DAG 워크플로를 작성하면, 스케줄러는 DAG 파일을 분석하고 각 DAG 태스크, 의존성 및 예약 주기를 확인
    1. 그러고 난 후 스케줄러는 마지막 DAG 까지 내용을 확인한 후 DAG의 예약 주기가 경과했는지를 확인한다. 예약 주기가 현재 시간 이전이라면 실행되도록 예약
    1. 예약된 각 태스크에 대해 스케줄러는 해당 태스크의 의존성을 확인한다. 의존성 태스크가 완료되지 않았다면 실행 대기열에 추가한다
    1. 스케줄러는 1단계로 다시 돌아간 후 새로운 루프를 잠시동안 대기
    1. 태스크가 실행 대기열에 추가되면 Airflow 워커의 pool 의 워커가 태스크를 선택하고 실행한다. 이 때, 실행은 병렬로 수행되고, 실행 결과는 지속적으로 추적된다
    1. 이 과정의 모든 결과는 Airflow 의 메타 스토어로 전달되어, 사용자가 Airflow의 웹 인터페이스를 통해 태스크 진행 상황을 추적하고 로그를 확인할 수 있음

2.3 모니터링 실패 처리

  • Airflow 는 DAG 를 확인하고, 실행 결과에 대해 모니터링이 가능한 웹 인터페이스를 제공
  • 개별 DAG 의 태스크와 의존성에 대한 그래프 뷰 화면을 제공
  • 이 뷰는 DAG의 구조와 개별 DAG에 대한 실행 결과를 확인하는 데 유용
  • Airflow는 그래프 뷰 이외에도 특정 DAG 에 대한 모든 실행 현황과 기록을 트리를 통해 확인할 수 있음
  • 이를 통해 DAG 가 시간 순으로 어떻게 수행되었는지 빠르게 확인할 수 있으며, 실패한 태스크에 대해서도 확인할 수 있음
  • Airflow 는 태스크 실패시에 재시도할 수 있기 때문에 오류 발생시에 태스크를 복구 할 수 있으며, 재시도 실패시, 이를 기록하고 통보함
  • 태스크 로그를 확인할 수 있으며, 디버깅을 쉽게 할 수 있음

2.4 점진적 로깅과 백필

  • 파이프라인을 점진적으로 실행되도록 구성이 가능, 효율적인 파이프라인 구축 가능
  • 전체 데이터 세트를 다시 처리할 필요 없이 해당 시간 데이터만 처리 → incremental data
  • 스케줄 주기가 백필 개념과 결합하여 스케줄 주기를 더욱 강력하게 활용할 수 있으며, 이를 통해 새로 생성한 DAG 를 과거 시점 및 기간에 대해 실행이 가능함.

3. 언제 Airflow를 사용해야 될까

3.1 Airflow를 선택하는 이유

  • 파이썬 코드를 이용해 파이프라인 구현 가능
  • → 파이썬에서 구현할 수 있는 대부분의 방법을 사용해 복잡한 커스텀 파이프라인 만들 수 있음
  • 쉽게 확장이 가능, 오픈소스 및 크라우드 서비스와 통합 가능
  • → 여러 오퍼레이터를 제공 / 지속적으로 추가중
  • 수많은 스케줄링 기법은 파이프라인을 정기적으로 실행하고 점진적 incremental 처리를 통해, 전체 파이프라인을 재실행할 필요 없는 효율적인 파이프라인 구축 가능
  • 백필 기능을 사용하면 과거 데이터를 손쉽게 재처리
  • → 코드를 변경한 후 재생성이 필요한 데이터 재처리가 가능
  • Web UI는 실행 결과 모니터링 및 오류 디버깅을 위한 편리한 뷰 제공

3.2 Airflow 가 적합하지 않은 경우

  • Airflow 는 반복적이거나 배치 태스크를 실행하는 기능에 초점이 맞춰져 있음
  • 스트리밍 워크플로 및 해당 파이프라인 처리에 적합하지 않을 수가 있음
  • 추가 및 삭제 태스크가 빈번한 동적 파이프라인의 경우에는 적합하지 않음→ 따라서, Airflow는 실행되는 동안 구조가 변경되지 않은 파이프라인에 좀 더 적합
  • → 동적 태스크를 구현할 수 있지만, 웹 인터페이스는 DAG의 가장 최근 실행 버전에 대한 정의만 보여줌(코드가 변경됬을 경우, 바뀐 코드를 새로 dags 경로에 추가해야함)
  • 코드로 DAG 를 작성하는 것은 파이프라인 규모가 커지면 복잡함
  • → 장기적으로 DAG 유지 관리 위해선 초기 사용시점부터 엄격한 관리가 필요
  • Airflow 는 워크 플로 및 파이프라인 관리 플랫폼이므로, 데이터 계보(lineage) 관리, 데이터 버전 관리와 같은 확장 기능은 제공하지 않음
  • → 필요한 경우 언급한 기능을 제공하는 특정 도구를 Airflow 와 직접 통합하거나 새로운 버전의 라이브러리를 주가해야함
반응형