01. Airflow란 무엇인가?
Airflow는 에어비앤비에서 개발한 워크플로우 스케줄링 및 모니터링 플랫폼이다.
이는 동작 순서 및 방식과 같은 파이프라인을 파이썬 코드를 이용해 구성하기 때문에 동적인 구성이 가능하다.
또한 분산구조와 메시 지큐를 이용해 많은 수의 워커 간 협업을 지원하고 스케일 아웃이 가능하다.
1-1. Ariflow의 아키텍처
스케줄러 - 브로커 & 메타 DB - 여러 개의 워커
1. 스케줄러: 실행 주기가 되면 작업을 생성하고, 의존 작업이 모두 성공하면 브로커에게 넘긴다.
2. 브로커: 실행 가능한 작업(워커)들이 들어가 있는 공간
3. 워커: 실제 작업을 진행하는 주체
4. DAG, Task 등이 정의되어 있다.
1-2. Airflow를 왜 사용해야 하는가?
이는 ※전일 회고글에 링크를 걸어 둔 글(오늘의 집 포스팅)에 잘 정리가 되어있다.
※ 전일 회고글
https://eng-sohee.tistory.com/77
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) 구워야 한다.
이를 그래프로 표현하면 아래 그림과 같다.
여기서, 각 작업 간 병렬 관계 및 전후관계 조건을 정의하면 아래와 같다.
- 불을 지피기 위해서는 반드시 나무를 모아 오는 선작업이 필요(전후관계가 존재)하다.
- 불을 지피는 작업과 물고기를 잡는 작업은 병렬 처리가 가능하다.
- 불을 지피는 작업과 물고기를 잡는 작업이 모두 종료되어야 요리(전후관계가 존재)를 할 수 있다.
만약 이를 오전 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
'데이터 공부 > Apache Airflow' 카테고리의 다른 글
Docker airflow2 커스텀 이미지 빌드 과정 (0) | 2022.04.02 |
---|---|
Apache Airflow 처음부터 빌드해보기 + 4 (0) | 2021.09.24 |
Apache Airflow 처음부터 빌드해보기+2 (0) | 2021.09.23 |
Apache Airflow 처음부터 빌드해보기 + 1 (0) | 2021.08.16 |
DAG 파일 생성 및 실행 + GCP(구글클라우드플랫폼) - Airflow 연동 (0) | 2021.06.29 |