Apache Airflow - 구조
Airflow 구조
Airflow는 다음과 같은 구조를 가지고 있습니다.
- Scheduler : Airflow의 DAG와 작업들을 모니터링하고 실행순서와 상태관리
- Worker : Airflow의 작업을 실행하는 공간
- Metadata database : Airflow에서 실행할 작업에 관한 정보를 저장
- Webserver: Airflow의 User Interface 에 해당하는 dashboard
- DAG Directory
Airflow는 스케줄러가 DAG Directory를 주기적으로 스캔하고 새로운 DAG 파일이 생성되면 Worker에서 실행합니다.
Airflow Webserver
Webserver에 로그인하면 다음과 같이 DAG 목록이 출력됩니다.
조## DAG (Directed Acyclic Graph) DAG(Directed Acyclic Graph)는 Airflow에서 실행할 작업들을 순서에 맞게 구성한 워크플로를 의미합니다. DAG을 구성하는 태스크(Task)라고 하며, 화살표 방향으로 순차, 병렬 실행합니다. DAG은 Python 코드로 정의하며 $AIRFLOW_HOME/dags폴더에 위치합니다.
- default_args
DAG에서 사용될 Attribute를 default_args로 분리하여 정의하여 DAG 파라메터로 전달합니다.
from airflow.models import DAG
from datetime import datetime
default_args = {
“start_date”: datetime(2022,1,2)
}
with DAG(
“myFirstDag”,
schedule_interval=”@daily”,
default_args=default_args,
catchup=False
) as dag:
- catchup
DAG을 생성할 때 전달하는 파라메터로써 Airflow에서는 default로 true로 설정되어 있는 옵션입니다. catchup기본 설정은 airflow.cfg 파일에 catchup_by_default값을 변경합니다. catchup은 DAG이 스케줄링에서 dagrun을 실행하지 못했던 것을 채우기 위한 기능으로 backfill 이라고도 합니다.
- Cron Preset
DAG을 실행하기 위한 스케줄링에 사용하며, DAG을 정의할때 schedule_interval인자로 전달합니다.
예시 )
- 스케줄링 간격 정의(timedelta)
스케줄 간격 정의 – 빈도 기반 cron expression은 간격(빈도)마다 스케줄을 정의할 수는 없습니다. 예를 들면 DAG을 3일에 한번씩 실행하는 cron을 정의하는 것은 어렵습니다. Airflow에서는 timedelta 인스턴스를 지원하여 빈도기반 스케줄링을 정의할 수 있습니다. 예를 들면 3일마다 또는 3시간마다 실행하도록 하는 것을 timedelta 인스턴스를 활용할 수 있습니다.
DAG Runs
DAG Run은 Task 인스턴스들을 DAG 에 정의된 특정 execution_date에 실행하는 DAG의 인스턴스입니다. execution_date는 Airflow 2.2에서는 local_date로 변경되었습니다. DAG는 Airflow 스케줄러 또는 외부 Trigger에 의해 실행될 수 있습니다. Execution_date가 다른 여개 개의 DAG가 동시에 실행될 수 있습니다.
DAG Runs를 선택하면 다음과 같이 실행 중이거나 종료된 DAG의 실행이력이 표시됩니다. CLI 명령어는 다음과 같습니다. airflow dags list
댓글남기기