데이터 공부/Apache Airflow

Airflow 개념 + Docker를 통한 Airflow 설치

한소희DE 2021. 6. 29. 11:51

 

 

 

 

01. Airflow란 무엇인가?

 

Airflow는 에어비앤비에서 개발한 워크플로우 스케줄링 및 모니터링 플랫폼이다.

 

 

이는 동작 순서 및 방식과 같은 파이프라인을 파이썬 코드를 이용해 구성하기 때문에 동적인 구성이 가능하다.

또한 분산구조와 메시 지큐를 이용해 많은 수의 워커 간 협업을 지원하고 스케일 아웃이 가능하다.

 

 

 

 

1-1. Ariflow의 아키텍처

 

스케줄러 - 브로커 & 메타 DB - 여러 개의 워커

 

 

1. 스케줄러: 실행 주기가 되면 작업을 생성하고, 의존 작업이 모두 성공하면 브로커에게 넘긴다.

2. 브로커: 실행 가능한 작업(워커)들이 들어가 있는 공간

3. 워커: 실제 작업을 진행하는 주체

4. DAG, Task 등이 정의되어 있다.

 

 

 

 

1-2. Airflow를 왜 사용해야 하는가?

이는 ※전일 회고글에 링크를 걸어 둔 글(오늘의 집 포스팅)에 잘 정리가 되어있다.

 

※ 전일 회고글

https://eng-sohee.tistory.com/77

 

17. 힘들지만 즐거워, 발전이 있었던 하루

오늘의 날짜: 2021년 06월 28일 01. 오늘을 회고하며 나는 현재 기업과 프로젝트를 진행 중이다. 오늘은 기업으로부터 데이터 접근 권한을 받았다. 접근 권한을 확인하며, 문제가 생겼다. 바로 어디

eng-sohee.tistory.com


 

02. DAG 란 무엇인가?

DAG는 비순환 방향 그래프다.

 

즉, 루프를 허용하지 않는다는 것이다. 그리고, 순서를 지정할 수 있다.

우리는 Airflow를 이용해 DAG 그래프 형태의 워크 플로로 각 배치 스케줄을 관리한다.

 

🔥 Airflow의 장점 + Cron 말고 Airflow를 사용해야 하는 이유

Airflow GUI에 접속하면 작업들의 전후관계 및 병렬 관계를 쉽게 그래프 화하여 보여준다. 따라서 어떤 워크플로우인지 이해하기가 쉽다. 또한 타임아웃 등의 예외상황이 발생할 경우에도 쉽게 보고가 가능하기 때문에 crontab보다 관리가 수월하다. 



🔥 GCP 클라우드 컴포저 말고 Airflow를 사용해야 하는 이유

비용 이슈 때문이다. 클라우드 컴포저는 쿠버네티스로 최소 3개의 워커노드 사용을 요구한다고 한다. 또한 부가 사용료를 계산하면 월 700달러 이상의 요금이 부과된다. 따라서 Airflow를 보통 선호한다고 한다.

 

Master DAG와 Slave DAG?

Master DAG란, 센서를 가진 DAG를 의미한다. Slave DAG란, 센서가 없는 DAG를 의미한다.
이 둘은 동일한 스케줄링을 공유한다는 특징이 있다.
(ex: Master DAG를 5분 간격으로 처리한다고 한다면, Slave DAG도 5분 간격으로 처리가 된다.)

 

 

 

1-1. DAG 예시

구글링 결과, 정말 좋은 DAG 예시를 찾았다! 따라서 그 게시물의 일부를 발췌해 소개해보겠다.

 

 

🔥 DAG 예시 - 생선구이 요리 Workflow
우리는 생선구이를 하기 위해, 1) 나뭇가지를 모아 와서 2) 불을 지피고 3) 생선을 잡아 4) 구워야 한다.
이를 그래프로 표현하면 아래 그림과 같다.

 

여기서, 각 작업 간 병렬 관계 및 전후관계 조건을 정의하면 아래와 같다.

  1. 불을 지피기 위해서는 반드시 나무를 모아 오는 선작업이 필요(전후관계가 존재)하다.
  2. 불을 지피는 작업과 물고기를 잡는 작업은 병렬 처리가 가능하다.
  3. 불을 지피는 작업과 물고기를 잡는 작업이 모두 종료되어야 요리(전후관계가 존재)를 할 수 있다.

 

 

만약 이를 오전 10시, 오후 4시 배치로 돌린다고 가정하면, 아래 코드와 같다.

from datetime import datetime
 
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
 
 
dag = DAG(
    'cookflow',  # DAG id
    start_date=datetime(2018, 6, 26),  # 언제부터 DAG이 시작되는가
    schedule_interval='0 10,16 * * *',  # 10시와 16시에 하루 두 번 실행
    catchup=False)
 
t1 = BashOperator(task_id='collect_wood', bash_command='echo collect wood', dag=dag)
t2 = BashOperator(task_id='start_fire', bash_command='echo start fire', dag=dag)
t3 = BashOperator(task_id='fish', bash_command='echo fish', dag=dag)
t4 = BashOperator(task_id='cook', bash_command='echo cook', dag=dag)
 
t1 >> t2 >> t4  # t1이 완료되면 t2 수행 가능; t2가 완료되면 t4 수행 가능
t3 >> t4  # t3가 완료되면 t4 수행 가능

출처: https://jwon.org/airflow-concepts/ 

 

 

 


 

03. Docker 통한 Airflow 설치

 

가장 먼저, Docker Hub에서 Airflow 이미지를 받아와야 한다.

이미지를 받아 오는 코드는 아래와 같다. cmd 창을 이용해 이미지를 받아오는 게 우선 작업이다.

docker pull puckel/docker-airflow 

 

이제 airflow_v1라고 컨테이너 명을 지칭하고, run 해보겠다.

docker run -d -p 8080:8080 --name airflow_v1 docker.io/puckel/docker-airflow 

 

이제 docker ps 명령어를 통해 잘 실행이 되는지 확인한 뒤, http://localhost:8080 에 접속하면, 정상적으로 잘 접속이 되는 것을 알 수 있다. 

 

 

위의 사진처럼 접속이 된다면 성공이다! 휴!

 

이제, 만든 컨테이너로 접근하도록 하겠다.

docker attach airflow_v1

 

다음 포스팅에서는, 컨테이너 내부에 필요한 라이브러리 등을 설치하고, BigQuery와 연동하는 방법을 공부해본 뒤 포스팅해보도록 하겠다!

 

 

 

(+공부 시 참고했던 포스팅들 중 유용했던 포스팅은 아래와 같다.)

https://dorumugs.tistory.com/entry/AirFlow-Manual-on-Docker-stage-install

 

AirFlow Manual on Docker (1)

[ 도커 이미지 버전 ] 도커는 가상머신을 지원한다. 여러 OS를 VM으로 올리지 않고 서비스만 올려서 사용할 수 있기 때문에 테스트할 때나 서비스 운영 할 때 많이 사용된다. 다양한 환경을 지원하

dorumugs.tistory.com