Home [Airflow] 1.데이터 파이프라인과 Airflow
Post
Cancel

[Airflow] 1.데이터 파이프라인과 Airflow

데이터 파이프라인과 Airflow

‘Apache Airflow 기반의 데이터 파이프라인’ 내용을 기반으로 작성되었습니다.


데이터 파이프라인

  • 최근 데이터에 대한 집중이 높아져서 데이터 파이프라인을 구축해서 관리하고 있음
  • 데이터 파이프라인을 핸들링하는 기술은 Airflow, Luigi와 같이 다양한 기술들이 활용되고 있음
  • 데이터 파이프라인은 보통 ETL 파이프라인이라고 하는데, Extract(추출), Transform(변환), Load(적재) 의 과정을 거치는 파이프라인
  • 반드시 ‘데이터 파이프라인 = ETL 파이프라인’ 인 것은 아님
  • 최근 클라우드 시스템을 활용하면서 ELT의 순서를 사용하기도 함

데이터 파이프라인이란

  • 이름에서 알 수 있듯이 데이터가 마치 물처럼 흘러서 갈 수 있게 파이프라인을 만들어 주는 것
  • 데이터 파이프라인이란 앞서 간단하게 말했듯이 데이터를 추출해서 가져오는 과정을 담은 파이프라인
  • ETL은 데이터 파이프라인의 서브셋이므로 그 자체는 아님
  • 데이터 파이프라인을 통해 들어온 데이터는 최종적으로 data warehouse에 일반적으로 적재됨
  • 최근에 데이터 파이프라인을 구축에는 다음과 같은 것들이 사용됨
    • 분산 처리 프레임워크
      • Hadoop, Spark
      • 데이터가 대규모로 수집되는 현재 시대에서 하나의 컴퓨터로 데이터를 핸들링하는 것보다 분산 처리 방식을 사용해서 대량의 데이터를 병렬로 처리
      • keyword : Hadoop EcoSystem, Spark, Scala, MapReduce
    • 데이터 레이크
      • S3, HDFS
      • 데이터를 저장하는 일종의 데이터베이스, 아마 데이터가 너무 많아서 호수와 같다고 붙여진 이름인 것으로 생각됨
    • Workflow 관리 시스템
      • Airflow, Luigi
      • 데이터 셋 생성, 모델 학습과 같은 다양한 태스크를 그래프 로 연결하여 실질적인 파이프라인을 구축하고 관리하는 시스템
    • 데이터 웨어하우스
      • BigQuery
      • 데이터 레이크에서 데이터를 가공해서 분석하기 좋게 정리한 것을 데이터 웨어하우스라고 함

데이터 파이프라인 그래프

  • 데이터 파이프라인은 태스크간의 순서가 정해진 형태로 진행됨
  • 반드시 이전 태스크가 제대로 수행되어야 다음 태스크를 수행할 수 있게 하는 것이 필요함
  • 이런 순서가 정해진 동작의존성이라 함
  • 의존성을 표현하는 방법으로 데이터 파이프라인을 그래프로 표현하는 것이 있음

  • 태스크 그래프는 방향성을 갖고 있기 때문에 방향성 그래프 (directed graph) 라고 함
  • 각 사각형을 태스크 노드라고 하고 화살표는 태스크 의존성이라 함
    • 반드시 태스크 의존성의 끝은 노드를 가리켜야하고 이전 태스크가 실행되어야 다음 태스크가 활성화됨
  • 화살표의 끝점이 순환이나 반복을 의미하지 않기 때문에 방향성 비순환 그래프(Directed Acyclic Graph) 라고 함
    • 태스크 간의 비순환 속성은 데드락을 방지하기 위해 반드시 필요함
  • keyword
    • 태스크
    • 태스크 노드
    • 태스크 의존성
    • 방향성 그래프
    • 방향성 비순환 그래프
    • 비순환 속성
    • DAG

파이프라인 그래프 실행

  • 파이프라인 수행 알고리즘
    1. 그래프 안의 태스크는 모두 개방된(open) 상태에서 시작
      • 이전 태스크가 완료되었는지 확인
      • 태스크가 완료되면 다음 실행할 태스크를 대기열에 추가
    2. 실행 대기열의 태스크 수행 후 완료시 완료 표시
    3. 그래프의 모든 태스크가 수행될 때까지 1단계로 돌아감
  • 이전 태스크를 ‘업스트림’이라고 함
  • 최초 태스크들은 업스트림 의존성이 없기 때문에 바로 실행 대기열에 추가됨
  • 의문점들
    • Q) 여기서 3번째 단계가 이해가 잘 안가는데, 비순환적 속성을 갖고 있는데 만약 1단계로 돌아간다면 순환적 속성이 되는 것이 아닌지..? 혹시 여기서는 의존관계가 아닌건가?

그래프 VS 절차적 스크립트 파이프라인

  • 파이프라인 설계 방식에는 DAG를 활용한 그래프 방식도 있지만 스크립트를 활용한 linear chain 형태로 실행할 수 있음
  • 이런 단일 스크립트의 파이프라인을 Monolithic(모놀리식) 이라고 함
  • 모놀리식 파이프라인의 문제점
    • 점진적인 태스크로 분리할 수 없음
    • 중간 태스크 실패시 스크립트를 재실행해야하는 문제가 있음
    • 예) 내가 맨날 짜는 파이프라인…. (단일 python script)
  • 그래프 파이프라인의 보완점
    • 실패 태스크 이후부터 재실행할 수 있으므로 효율적 구성
    • 파이프라인을 병렬적으로 수행가능
    • 태스크를 분리할 수 있음
  • 모든 태스크가 의존성으로 다 연결된 게 아닐 수도 있음
    • 특정 태스크들을 시작점이 다르게 시작되었다가 특정 태스크에서 합쳐질 수도 있음
    • 이런 경우 각 태스크들을 병렬적으로 수행하면 효율적임

Airflow

  • Airflow는 Airbnb에서 개발된 오픈소스 workflow management tool
  • Argo, Luigi, Metaflow와 같은 다양한 관리 도구가 있음
  • Luigi와 Airflow는 파이썬을 활용하기에 확장성이 좋음
  • 여기에 Airflow는 스케쥴링 기능을 추가해서 기능적이 측면에서 뛰어남

Python을 사용한 파이프라인 정의

  • Airflow는 python으로 DAG를 구조화하고 구성함
  • DAG 파일을 파이썬으로 작성하면 Ariflow가 DAG 코드를 파싱해서 수행함
  • 이 과정에서 schedule interval 같은 메타데이터를 지정할 수 있음
  • python을 쓴다는 점에서 확장성이 좋다는 장점이 있음

파이프라인 스케쥴링

  • Airflow 구성요소
    • Airflow scheduler : DAG 분석, 스케줄 파악 후 Airflow worker에 DAG 태스크 예약
    • Airflow worker : 예약된 태스크 선택 후 실행
    • Airflow web server : 스케줄러가 분석한 DAG 시각화, DAG 실행과 결과를 확인하는 인터페이스 제공
  • Airflow Scheduler
    1. DAG 파일 분석 후 DAG 태스크, 의존성 및 예약 주기 확인
    2. 마지막 DAG까지 확인 후 DAG의 예약 주기를 확인
    3. 예약된 태스크에 대해 태스크 의존성 확인 후 처리
    4. 1단계로 돌아가고 루프를 대기
  • Ariflow worker
    • 실행 후 결과를 지속적 추적

Airflow를 사용하는 경우

Airflow가 적합한 경우

  • python을 활용하므로 python을 사용한 방법으로 모든 복잡한 파이프라인 구축이 가능
  • python 기반이라 확장성이 좋음
  • 스케줄링을 통해 정기적인 실행과 점진적인 처리를 통해 부분 재실행이 가능한 효율적인 파이프라인 구축
  • 파이프라인 결과를 지속적으로 모니터링 가능
  • 백필 기능을 통한 과거 데이터 재처리
    • 백필 : 특정 기간 기준으로 다시 실행하는 기능
  • 반복적이고 배치인 태스크를 실행하는 것에 집중되어짐

Airflow가 적합하지 않은 경우

  • Airflow는 앞서 말한 특징을 요약하면 반복적이거나 배치 태스크를 실행하는 것에 맞춰져 있으므로 실시간 처리 workflow에는 적합하지 않음
  • 추가, 삭제가 태스크가 빈번한 동적 파이프라인은 적합하지 않을 수 있음
    • 웹 인터페이스는 DAG의 최근 실행버전의 정의만 표현하므로 실행되는 동안 구조가 변경되지 않는 것이 좋음
  • 가장 중요한 것은 Python을 쓸 줄 알아야함
  • 파이프라인 규모가 커지면 관리가 어려워질 수 있으므로 초기 사용 시점부터 엄격한 관리가 필요함
This post is licensed under CC BY 4.0 by the author.

[BoostCamp AI Tech / Final] Day77 - 더미데이터 제작 및 GCP 세팅

[BoostCamp AI Tech / Level 3 - Product Serving] Day81 - MLOps 개론

Comments powered by Disqus.