본문 바로가기
데이터 어쩌구/기술 써보기

C1. Apach Airflow 살펴보기

by annmunju 2024. 6. 2.

1.1 데이터 파이프라인 소개

1.1.1 데이터 파이프라인 그래프

  • 방향성 비순환 그래프 DAG
    • 앞선 태스크가 완료되어야 뒤의 태스크 실행 가능
    • 순환 그래프의 경우, 상호 의존성이 있어 명확한 실행 경로 파악 불가

1.1.2 파이프라인 그래프 실행

  • 그래프 안 태스크는 각각 개방된 상태, 이전 태스크가 완료되었는지 확인
  • 태스크 완료되면 다음 태스크를 대기열 추가
  • 그래프의 모든 태스크가 완료될 때 까지 실행

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

  • 개별적인 태스크로 병렬 구성이 가능하기 때문에, 가용 컴퓨팅 리소스를 효율적으로 활용 가능
  • 절차적 (모놀리식) 스크립트의 경우 중간 태스크가 실패하면 전체를 재실행 해야함.

1.4 워크플로 매니저를 이용한 파이프라인 실행

  • 워크플로 관리 시스템의 주요 차이
    • 정의 방식
      • Oozie : 정적 (XML) 파일을 사용하여 워크플로 정의
      • Luigi, Airflow : 코드로 정의
    • 워크플로 관리자 제공 기능
      • Make, Luigi : 워크플로 스케줄 기능 없음. 반복 실행하려면 Cron과 같은 추가 도구 사용
      • Airflow : 스케줄, 모니터링, 웹 인터페이스 등 제공

1.2 Airflow 소개

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

  • 파이썬으로 DAG 파일 정의

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

  • Airflow 구성요소

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

    1. DAG 워크플로 작성하면 -> 파일 분석하고 -> 태스크와 의존성 및 예약주기 확인
    2. 스케줄러가 마지막 DAG까지 내용 확인 후 예약 주기가 경과했는지 확인. 예약 주기가 현재 시간 이전이라면 실행되도록 예약
    3. 예약된 각 태스크에 대해 의존성 확인. 의존성 태스크가 완료되지 않으면 실행 대기열에 추가
    4. 스케줄러는 1단계로 다시 돌아간 후 새로운 루프를 잠시 동안 대기

1.2.3 모니터링과 실패 처리

  • 웹 인터페이스 제공
  • 실패 처리
    • 실패시에 재시도(실행 간격을 설정할 수 있음)
    • 재시도 실패시 알림 설정 가능
    • 로그 확인하며 디버깅 가능
    • 트리 뷰에서 개별 태스크 결과 삭제하고, 종속된 태스크를 모두 재실행할 수 있음.

1.2.4 점진적 로딩 및 백필

  • 최종 시점 및 예상되는 다음 스케줄 주기를 알려줄 수 있음
  • 매번 전체 데이터 셋을 다시 처리할 필요가 없고 부분 실행 가능. (시간 비용 절감)
  • 백필 : 특정 옵션(기간) 기준으로 다시 실행할 수 있는 기능.

1.3 언제 Airflow를 사용해야 할까

1.3.1 적합

  • 파이썬 사용
  • 파이프라인을 정기적으로 실행하고 점진적(증분)처리를 통해 재실행 없는 파이프라인 구성 가능
  • 다양한 DB, 클라우드 통합
  • 백필 기능으로 코드 수정 후 재생성이 필요한 데이터 재처리 가능
  • 웹 인터페이스로 모니터링, 오류 디버깅 편리
  • 오픈소스

1.3.2 부적합

  • 스트리밍 워크플로
  • 추가, 삭제 태스크가 빈번한 동적 파이프라인의 경우
  • 파이썬 사용하지 않는 팀
  • 파이프라인 규모가 커지면 복잡해, 엄격한 관리 필요

1.4 이후 내용

  • 구성 설명
  • 동적 DAG
  • 커스텀 오퍼레이터 구현
  • 컨테이너화 된 태스크 실행
  • 배포 패턴
  • 모니터링
  • 보안
  • 클라우드 아키텍쳐

요약

  • DAG
  • 웹 서버, 스케줄러, 워커 프로세스
728x90