수업 1107

galoo·2023년 11월 8일
0

HelloVision Dx Data School

목록 보기
71/72

✔ Airflow

개요

  • 워크플로를 개발하고 모니터링하기 위한 오픈 소스 솔루션
  • workflow는 일련의 작업의 흐름
  • ETL
    - 데이터를 추출하고 변환하고 적재하는 작업
  • 이러한 작업의 흐름을 관리해주는 애플리케이션 중의 하나가 Airflow
  • Airflow를 이용해서 많이 하는 작업이 데이터 수집 및 전처리와 저장 작업(DataLake를 만들때)
  • Batch Processing

사용자
1. airflow web server(DAG 실행 상태와 모니터링)
2. dags(파이썬으로 Airflow DAG 파일을 작성) -> Airflow Scheduler -> 태스트 예약 -> Airflow Worker가 예약된 작업을 예약된 이벤트가 발생하면 수행 -> 결과를 Airflow MetaStgore에 저장하고 Web Server를 이용해서 출력
- 이렇게 보면 cron과 비슷한 작업
- Airflow는 python으로 작성

구성요소

  • DAG(Directed Acyclic Graph)
    - 비순환 그래프, 알고리즘의 용어이기도 하다.
  • 스케줄러
    - DAG를 분석하고, 현재 시점에서 DAG의 스케줄이 지난 경우, Airflow Worker에 DAG의 태스크를 예약
    - 사용자가 DAG workflow를 작성하면, 스케줄러는 DAG 파일을 분석하고, 각 DAG의 태스크 의존성 및 예약 주기를 확인
    - 스케줄러는 마지막 DAG까지 내용을 확인하고, DAG의 예약 주기가 경과했는지 확인해서 예약 주기가 현재 시간 이전이라면 실행되도록 예약
    - 예약된 각 태스크에 대해 스케줄러는 해당 태스크의 의존성을 확인하고, 의존성 태스크가 완료되지 않았다면, 실행 대기열에 추가하고 그렇지 않다면 worker에 전달합니다.
  • 워커
    - 실행 대기열의 작업을 실행하는 요소
    - 실행은 병렬로 수행되고, 실행 결과는 지속적으로 추적됨
    - 모든 결과는 메타스토어로 전달해서 사용자가 웹 인터페이스를 통해서 확인할 수 있도록 합니다.
  • 웹 서버
    - 스케줄러에서 분석한 DAG를 시각화하고, DAG 실행과 결과를 확인할 수 있도록 인터페이스를 제공함

모니터링 및 실패 처리

  • 웹 인터페이스를 통해서 모니터링을 할 수 있고, 실패한 태스크를 복구할 수 있음

점진적 로딩과 백필(지난 날짜를 기준으로 재처리)

  • 스케줄링을 할 때, 특정 시점에 트리거 할 수 있을 뿐 아니라, 최종 시점과 예상되는 다음 스케줄 주기를 상세하게 설정하는 것이 가능함
  • 이러한 특성 때문에 데이터 파이프라인을 구축할 때 많이 사용
  • 이 파이프라인을 이용하면, 각 DAG 매번 전체 데이터 세트를 다시 처리하지 않고, 해당 시간에 대한 데이터만 처리하는 것이 가능
  • 시간과 비용을 줄일 수 있음
  • Airflow는 백필 기능이 있어서, 지난 시점의 작업도 가능합니다.

Airflow는 배치 지향 데이터 파이프라인을 구축하는데 적합

  • 파이썬으로 DAG를 작성하기 때문에, 파이썬으로 가능한 모든 작업을 파이프라인으로 만들 수 있습니다.
  • 다양한 유형의 DB나 클라우드 서비스 등과 통합이 가능한 애드온이 존재
  • 스케줄링 방법이 다양함
  • 백필 기능을 제공
  • 모니터링을 위한 Web Interface 제공
  • 오픈 소스이지만, 특정 Vender에서는 관리형 Airflow 제공
    - 오픈소스의 장점은 내 마음대로 편집 가능
    - 단점은 내가 학습해야 한다는 것
    - 실제로 내가 사용하기 어렵다.

적합하지 않은 경우

  • 스트리밍(실시간 데이터 처리) 워크플로 및 해당 파이프라인 처리에 적합하지 않을 수 있음
  • 추가 및 삭제 태스크가 빈번한 동적 파이프라인에는 적합하지 않을 수 있음
  • 파이썬 언어를 알아야 함
  • 파이썬 코드로 DAG를 작성하기 때문에, 파이프라인 규모가 커지면, 굉장히 복잡해진다.

✔ 데이터 수집 샘플

데이터를 가져올 API

수행할 작업

  • API를 가져와서 파싱하고 이미지를 다운로드 받아서 저장하자
  • API 다운로드, 저장하고 이미지 URL을 이용해서 이미지 다운로드 받아 저장하고 echo로 결과를 출력하기
  • 작업을 작성할 때는 파이썬 코드로 작업하는데, 작업 자체는 파이썬 대신에 배치 스크립트(리눅스 명령)를 사용하는 것이 가능함

DAG 파일 작성

  • download_image.py

Task와 Operator의 차이

Operator

  • 사용자가 작성한 작업

Task

  • Operator가 동작하도록 해주는 Airflow의 Wrapper

Dokcer에서 실행하기

  • docker run -it -p 8080:8080 -v ./download_image.py:/opt/airflow/dags/download_image.py --entrypoint=/bin/bash --name=airflow -c'(airflow db init && airflow users create --username sonic --password supersonic --firstname FirstName --lastname LastName --role Sonic --email mhlee5894@gmail.com); airflow webserver & airflow scheduler'
profile
밀가루 귀여워요

0개의 댓글