반응형
1. 정리 목적
- AirFlow에 대한 기본 개념을 살펴본다.
- AirFlow의 기본 구성을 살펴본다.
2. AirFlow란?
- AirFlow는 AirBnB에서 만든 Workflow management
- Python 코드로 워크플로우(workflow)를 작성하고, 스케쥴링, 모니터링 하는 플랫폼
- 스케쥴링을 하고 모니터링을 코드로 작성하기 때문에 더 세분화 할 수 있으므로, 더 정교화된 파이프라인을 구성 가능
- 예약된 워크플로를 트리거 하고 실행 할 실행기에 Task을 제출하는 두가지를 모두 처리하는 스케줄러
2.1 Apache AirFlow를 사용하는 이유
- 데이터 ETL (Extract, Transform, Load) 과정을 통해 데이터를 가공하며 적재
- 작업을 정확한 시간과 방법, 순서대로 실행하게 해주는 오케스트레이터 역할
- 장점
- Python으로 가능한 작업들을 Airflow 파이프라인에서 처리 가능 (Python code로 workflow 정의)
- 원하는 만큼의 다양한 Task들을 병렬적으로 실행 가능 (Kubernetes 클러스터, 분산 클러스터 환경에서도 파이프라이닝 가능
- 웹 인터페이스를 통한 데이터 파이프라인 모니터링으로 관리하기 편리
- Customizing 하기가 쉬움 (플러그인 설치 등)
2.2 Apache AirFlow의 기본 구성
- User interface / Web Server
- Airflow는 설치 만으로 Web Server를 구성할 수 있음
- Airflow의 웹 UI 서버
- DAG Directory
- Directed Acyclic Graph로 개발자가 Python으로 작성한 Workflow
- 작업 스케쥴을 만들어주는 스케쥴링 단위를 작성한 DAG를 보관하는 장소
- Python 코드로 작성한 Dag들을 여기에 보관
- Task들의 dependency를 정의
- Worker
- 실제 Task를 실행하는 주체
- Executor 종류에 따라 동작 방식이 다양함
- Metadata Database
- 실행할 Task의 관한 정보를 저장 (순서, 작업 스케쥴링 등)
- Task Status (queued, scheduled, running, success, failed, etc) 저장
- Airflow에 존재하는 DAG와 Task들의 메타데이터를 저장하는 데이터베이스
- Scheduler
- 모든 DAG와 Task 작업들을 모니터링, 관리하고 실행 순서와 상태 및 Task를 스케쥴링
- Executor
- 스케쥴러와 함께 동작하는 구성요소
- Status가 queued인 Task를 확인하여 실제 어떤 리소스가 투입되어 실행 될 것인지 결정
- Local Executor, Celery Executor, Kubernetes Executor 등이 있음
2.3 AirFlow DAG (Directed Acyclic Graph)
- Airflow의 DAG는 실행하고 싶은 Task들의 관계와 dependency를 표현하고 있는 Task들의 모음
- 어떤 순서와 어떤 dependency로 실행할지, 어떤 스케쥴로 실행할지 등의 정보를 가지고 있음
- DAG를 정확하게 설정해야, Task를 원하는 대로 스케쥴링 가능
2.4 Airflow Operator
- 각 Airflow DAG는 여러 Task로 이루어져있음
- operator나 sensor가 하나의 Task로 만들어지며 Airflow는 기본적인 Task를 위해 다양한 operator를 제공
- BashOperator : bash command를 실행
- PythonOperator : Python 함수를 실행
- EmailOperator : Email을 발송
- MySqlOperator : sql 쿼리를 수행
- Sensor : 시간, 파일, db row, 등등을 기다리는 센서
2.5 Airflow Executor
- Worker의 동작이 Airflow Executor의 종류에 따라 달라짐
- Executor는 Task를 실행하는 주체로, 다양한 종류가 있고 각각 다른 특징을 가지고 있음
- Production에서 많이 사용되고 있는 Celery Executor는 Task를 메시지 브로커에 전달하고, Celery Worker가 Task를 가져가서 실행하는 방식
- Worker 수를 스케일아웃 할 수 있다는 장점
- 메시지 브로커를 따로 관리해야하고 워커 프로세스에 대한 모니터링도 필요하다는 단점
2.6 Apache Airflow의 구동 순서
- DAG를 작성하여 Workflow를 작성 (DAG는 Task로 구성)
- Task는 Operator가 인스턴스화 되어 있음
- DAG를 실행 할 때 Scheduler는 DagRun 오브젝트를 구성함
- DagRun 오브젝트는 Task Instance를 구성함
- Worker가 Task를 수행 후 DagRun의 상태를 “완료”로 변환
- webserver 구동 → folder DAGs 파일 받아 보여줌 →
Scheduler에서 Folder DAGs를 보고 Metastore에 정보전달 DAGRun 생성 →
DagRun에 해당하는 Task Instance 생성 및 Executor에 전달 →
Task가 다수인 경우 Metastor와 Task들의 처리 상태(진행, 건너뛰기, 완료 등)를 업데이트하면서 Execute 진행 →
완료 후 DagRun에 완료 상태 보내고 Scheduler에 완료 상태 업데이트 알린 뒤 종료
2.7 Airflow 시간
- start_date 와 schedule_interval
- Airflow는 기본적으로 UTC 시간을 사용
- Airflow 자체의 코드를 확인해보면 start_date는 python datetime object, schedule_interval은 cron으로 표현된것을
- timedelta object로 변경하여 사용
- start_date를 기준으로 schedule_interval을 더해가면서 DAG를 scheduling 하는 원리
- start_date만 잘 표현해주면 한국시간 기준으로 schedule_interval을 작성 가능
- DAG마다 한국 시간 Timezone을 명시 해줌으로 시간에 대한 큰 고민없이 DAG 코드를 작성
- 하기 작성된 코드를 보면 2023년 1월 1일 오전 8시에 처음 실행된다고 생각할 수 있으나 실제로는 1월 2일 오전 8시에 처음 실행
import pendulum
from airflow import DAG
from datetime import datetime, timedelta
# 한국 시간 timezone 설정
kst = pendulum.timezone("Asia/Seoul")
# 한국 시간 2023년 1월 1일 시작, 오전 8시마다 실행되는 DAG 설정
dag = DAG(
dag_id="test_dag",
default_args=default_args,
start_date=datetime(2023, 1, 1, tzinfo=kst),
schedule_interval="0 8 * * *",
)
2.8 Airflow execution_date
- Airflow에서 start_date는 실행 시작 날짜가 아니라 스케줄이 시작 되는 날짜
- 상단 예제에서 1월 1일 부터 하루에 한 번씩 8시에 스케줄이 등록되고, 하루 뒤인 1월2일부터 execution_date가 1월 1일인 DAG가 실행
- execution_date는 나중에 해당 DAG를 다시 실행해도 그대로 1월 1일로 유지되는 이 DAG고유 실행 Id 값
- cron 과 같은 scheduler처럼 생각하면 이 execution_date가 헷갈릴 수 있음
- execution_date가 1월 1일인 task의 경우 1월1일의 data를 가지고 ETL을 한다고 예상 가능
- 1월1일 데이터는 1월2일이 되어야 모두 존재하기 때문에 Airflow는 이런 방식의 시간을 설정
✔ Workflow란?
- 작업 흐름이라는 뜻
- 가장 작은 단위인 Operator부터 Task, Dag, Workflow 순으로 정의 (Operators (Task) > DAGs > Workflow)
※ 참조 url :
- https://lsjsj92.tistory.com/631
Apache 에어플로우(Airflow) 시작하기 - Airflow란?, Airflow 설치 및 기본 예제
포스팅 개요 본 포스팅은 Apache Airflow(에어플로우)에 대해서 정리하는 Airflow 시리즈 포스팅입니다. Airflow 포스팅에서는 아래와 같은 순서로 Airflow에 대해서 정리해보려고 합니다. Airflow란 무엇인
lsjsj92.tistory.com
- https://magpienote.tistory.com/192
[Airflow 기본 내용] Airflow란? 구성요소, 구동원리, 개념, 용어 정리
Airflow란? airflow는 airbnb에서 만든 workflow를 만드는 오픈소스 프로젝트이다. python 코드로 워크플로우(workflow)를 작성하고, 스케쥴링, 모니터링 하는 플랫폼임. 스케쥴링을 하고 모니터링을 코드로
magpienote.tistory.com
반응형
'스터디 (정리) > BigData' 카테고리의 다른 글
[BigData] Apache Hadoop (HDFS) 정리 (2) | 2023.12.16 |
---|---|
[BigData] Apache Kafka 정리 (4) | 2023.12.16 |
[BigData] Apache Flume 정리 (1) | 2023.12.16 |
[BigData] Elastic MapReduce(EMR) 개요 정리 (2) | 2023.10.23 |
[BigData] Spark 개요 정리 (3) | 2023.10.20 |