3. 01
Airflow소개
Airflow?
에어비앤비(Airbnb)에서 만든 파이썬 기반의 데이터 워크플로우 작성, 모니터링, 스케줄링 플랫폼
Airflow시작History
2014.10 2015.06 2016.03 2019.01
Github도입,
발표
Apache Software
Foundation
인큐베이팅 프로젝트
참여
Apache Airflow
Top-Level-
Project 승격
5. 03
Airflow특징
Airflow 특징
ㆍDynamic
- 파이프라인(동작순서, 방식)을 파이썬 코드를 이용하여 구성하기 때문에 동적인 구성이 가능
ㆍExtensible
- python 이용하여 Operator, executor를 사용하여 사용자의 환경에 맞게 확장하여 구성하는 것이 가능함
ㆍElegant
- 진자 템플릿(jinja template)을 이용하여 파라미터화 된 데이터를 전달하는 것이 가능
ㆍScalable
- 분산구조와 메시지큐를 이용하여 많은 수의 워커간의 협업을 지원하고, 스케일 아웃이 가능함
7. 03
Airflow특징
Operators
Task에서 실행되는 실제 작업 방식을 결정한다.
각 Task들은 Operator클래스를 인스턴스화해서 만든다.
ㆍBashOperator - Bash 명령 실행
ㆍPythonOperator - Python 함수 실행
ㆍEmailOperator - 이메일 전송
ㆍSimpleHttpOperator - HTTP 요청 전송
8. 03
Airflow특징
Executors
Executor는 task 수행에 필요한 worker process를 실행한다
ㆍSequentialExector (default)
- 한번에 하나의 Task intance를 실행 / SQLite3를 backend로 설정
ㆍLocalExecutor
- Task 병렬 처리 가능 / MySQL이나 PostgreSQL을 backend로 설정
ㆍCeleryExecutor
- Task를 여러 서버(node)에 분산 처리 가능 (cluster) / Celery backend (RabbitMQ, Redis, …) 설정이 필요
ㆍDaskExecutor
- Celery와 같은 역할이지만 Dask로 처리 / Dask 클러스터는 Single Machine 또는 원격 네트워크에서 실행
11. 04
AirflowQuickStart
(StandAlone)
Example Code
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from datetime import datetime, timedelta
default_args = {
'owner': 'airflow’,
'depends_on_past': False,
'start_date': datetime(2015, 6, 1),
'email': ['airflow@example.com’],
'email_on_failure': False,
'email_on_retry': False,
'retries': 1,
'retry_delay': timedelta(minutes=5)
}
dag = DAG( 'tutorial', default_args=default_args, schedule_interval=timedelta(days=1))
t1 = BashOperator( task_id='print_date', bash_command='date', dag=dag)
t2 = BashOperator( task_id='sleep', bash_command='sleep 5', retries=3, dag=dag)
templated_command = """
{% for i in range(5) %}
echo "{{ ds }}“
echo "{{ macros.ds_add(ds, 7)}}"
echo "{{ params.my_param }}"
{% endfor %}
""“
t3 = BashOperator(
task_id='templated’,
bash_command=templated_command,
params={'my_param': 'Parameter I passed in’},
dag=dag)
t2.set_upstream(t1)
t3.set_upstream(t1)
DAG 생성
Operator로 Task 생성
DAG 설정
Jinja
Template
upstream으로 Task간 관계를 정의
12. 05
AirflowClustering
(Celery)
1. Web server –> Workers - Task 실행 로그를 가져온다
2. Web server –> DAG files - DAG 구조 공개
3. Web server –> Database - Task 상태 가져오기
4. Workers –> DAG files - DAG구조 공개하고 Task 실행
5. Workers –> Database - Connection configuration, variables, XCOM 정보를 가져오고 저장
6. Workers –> Celery’s result backend - Task 상태 저장
7. Workers –> Celery’s broker - 실행명령 저장
8. Scheduler –> Database - DAG 실행 및 관련 Task 저장
9. Scheduler –> DAG files - DAG구조 공개하고 Task 실행
10. Scheduler –> Celery’s result backend - 완료된 Task의 상태정보를 가져온다.
11. Scheduler –> Celery’s broker - 실행할 작업명령을 넣습니다.
Clustering Architecture - 1