[플레이데이터] Apache 에어플로우(Airflow)

싱숭생숭어·2023년 5월 23일
0

플레이데이터 수업

목록 보기
8/21

Apache Airflow

Apache Airflow란?

airflow란 AirBnB에서 만든 workflow management tool

여기서 workflow는 일련의 작업의 흐름을 의미함

예를 들어 ETL 같은 경우, 데이터를 Extractaction(추출) -> Transformation(변환) -> Loading(로드) 하는 작업의 흐름이 있음

이런 workflow(작업의 흐름)을 관리하는 툴이 바로 airflow !

여기서 "관리": workflow를 작성, 스케줄링, 모니터링 하는 작업을 의미

airflow는 요즘 핫한 mlops에서도 많이 사용되고, 데이터 엔지니어 영역에서도 많이 사용되고 있는 추세 !

Apache Airflow를 사용하는 이유

  • 데이터 엔지니어링에선 데이터를 ETL하는 과정을 통해 데이터를 가공 및 적재함
    • 비슷하게, 머신러닝 분야에서도 모델 학습용 데이터를 전처리하고, 훈련하고 예측 시 사용함
  • 위의 경우 여러개의 Sequential한 로직(앞의 output이 뒤의 input이 되는)이 존재하는데 이런 로직들을 한번에 관리해야 함
  • 관리할 로직이 적다면 CRON + 서버에 직접 접속해 디버깅 하는 방식으로 사용할 수 있지만, 점점 관리할 task들이 많아지면 헷갈리는 경우가 생김
    • airflow와 비슷한 workflow management 도구는 airflow외에도 하둡 에코시스템의 oozie, luigi 같은 솔루션이 존재함

Apache Airflow의 장점

  • Apache Airflow는 Python 기반으로 만들어졌기 때문에, 데이터 분석을 하는 분들도 쉽게 코드를 작성할 수 있음
  • Airflow 콘솔이 따로 존재해 Task 관리를 서버에서 들어가 관리하지 않아도 되고, 각 작업별 시간이 나오기 때문에 bottleneck을 찾을 때에도 유용함
  • 또한 구글 클라우드 플랫폼(BigQuery, Dataflow)을 쉽게 사용할 수 있도록 제공되기 때문에 GCP를 사용하시면 반드시 사용할 것을 추천 !
    • Google Cloud Platform에는 Managed Airflow인 Google Cloud Composer가 있음
    • 직접 환경을 구축할 여건이 되지 않는다면 airflow 같은 서비스를 사용하는 것이 굿 !

airflow에는 특징이 되는 구성요소들이 존재하고, 각 구성요소 간 아키텍처는 위의 사진과 같다 !

Apache Airflow 공식 문서 참고

Airflow의 구성 요소 네가지

  • Webserver

  • Scheduler

  • Executor

  • Workers

➕ DAG(Directed Acyclic Graph = 일방향 비순환 그래프)라는
개념을 이용해 workflow를 작성함 !


Airflow Webserver

Airflow의 웹서버는 Airflow의 log를 보여주거나, Scheduler에 의해 생긴 DAG 목록, Task 상태 등을 시각화해서 보여줌

뿐만아니라 웹 UI를 활용해 실행, 재시작, 수동조작, 로그 확인이 가능

즉, UI를 통해 사용자에게 시각적으로 정보를 제공해주는 요소 !

-> 주소창에 127.0.0.1:8080이라고 입력하면 뜨는 창으로 확인 가능

Airflow Scheduler

Airflow의 스케쥴러는 airflow로 할당된 작업들을 스케쥴링 해주는 요소 !

작업 기준이 충족되는지 여부를 확인하고, 스케쥴링된 workflow의 triggering과 실행하기 위해 executor에게 task를 제공해주는 역할을 함

Airflow Executor

Airflow executor는 실행중인 task를 handling하는 요소 !

default 설치 시에는 scheduler에 있는 모든 것들을 다 실행시키지만, production 수준에서의 executor는 worker에게 task를 push함

Airflow Worker

Airflow worker는 실제로 task를 실행하는 주체자

Airflow Database

Airflow database는 airflow에 있는 DAG, Task 등의 metadata를 저장하고 관리함

DAG(Directed Acyclic Graph)

DAG는 비순환 그래프로, 순환하는 사이클이 없는 그래프를 의미함

즉, 노드와 노드가 단방향으로 연결되어 있어 그 노드에서 출발하면 다시 그 노드로 돌아오지 않는 특성을 가지는 것

Airflow에선 이러한 DAG를 이용해 workflow를 구성하여 어떤 순서로 task를 실행시킬 것인지, dependency를 어떻게 표현할 것인지 등을 설정함


Airflow 설치 및 실행

  • Airflow는 pip 명령어로 설치 가능
    wsl에 들어가서 pip install apache-airflow

  • Extra Packages가 필요하다면 아래 명령어로 설치 가능
    pip install apache-airflow[gcp]

  • Airflow를 설치한 이후 처음 airflow의 db를 생성해야함
    airflow init db

  • werkzeug 관련 오류가 발생할 경우 라이브러리 설치
    pip install werkzeug

  • airflow user 생성
    airflow users create --username admin --password admin --firstname Anonymous --lastname Admin --role Admin --email test@test.com

    • username과 password가 admin인 admin 계정 생성
  • Airflow 실행
    airflow webserver &
    airflow scheduler &

    • airflow에서 webserver와 scheduler를 실행
    • webserver는 웹서버를 담당하고, scheduler가 DAG들을 스케줄링(실행)함
  • 위에서 pip를 통해 airflow를 설치했을 경우 ~/airflow라는 폴더가 생김

    • 폴더 내부에 기본적으로 존재하는 파일 설명
      • airflow.cfg: Airflow 관련 설정
      • airflow.db: sqlite 데이터베이스
      • dags 폴더 -> 없다면 mkdir dags로 생성 !(나의 경우 없어서 새로 생성함): DAG 파일들이 저장되는 장소

이 포스팅에 참고 및 활용한 문서들 !

profile
공부합시당

0개의 댓글