- airflow는 workflows를 Run하고, Build 하도록 해주는 Platform 이다.
- Worflow는 DAG(a Directed Acyclic Graph)로 표현된다.
- Worflow는 Tasks라고 불리는 일련의 data flow가 포함되어있다.
- DAG는 Tasks 간의 의존성을 특정할 수 있으며 실행하고 회수하는 작업을 할 수 있다.
- Airflow는 일반적으로 아래와 같은 컴포넌트들로 구성되어있다.
- Scheduler : 스케줄링된 workflow들을 triggering 하고, 수행할 Task들을 제출하는 것을 다룬다.
- Executor : task를 실행하는 것을 다룬다. 대부분은 스케줄러에서 run 하지만, production에 적합한 executor들은 workers로 task를 실행한다.
- Web Server : user interface다. 이를 통해 DAGs, tasks를 trigger, inspect, debug 할 수 있다.
- DAG 들에 대한 folder : workrers, executor, schduler에 의해 읽어지는 파일들이다.
- Metadata Database : state store를 위해 사용된다.
- 대부분의 executor들은 task queue와 같은 역할을 하는 worker들에게 컴포넌트들 실행을 맡겨준다. 사용자는 이런거 신경쓸 필요없이 singloe logical 컴포넌트로 수행하는 것처럼 수행하면 된다.
Workloads
- DAG는 Tasks 의 시리즈로 실행된다. 여기에는 세가지 task type이 있다.
- Operators : 미리 정의한 tasks
- Sensors : Operator들의 특별한 subclass, 대부분 외부 event를 기다린다.
- TaskFlow-Decordated : @task, Custom Python Function을 Task로 packaged 해준다.
- 위 Tasks type은 BaseOperator의 subclass들이다.
Control Flow
first_task >> [second_task, third_task]
fourth_task << third_task
, << operator들을 사용해서 task간 종속성을 나타낼 수 있다.
first_task.set_downstream([second_task, third_task])
fourth_task.set_upstream(third_task)
- 위의 함수들을 통해서도 가능하다.
- 이러한 종속성은 Graph에서 edge로 만들어진다.
- Data를 pass 할때에는 두가지 정도의 옵션이 있다.
- XComs("Cross-communications"), task를 metadata에서 작은 bit로 push하고 pull하는 시스템.
- 큰 파일들을 Uploading 하거나 Downloading
- Airflow는 Task를 worker로 보내서 실행 시키므로 같은 mahcine or worker에서 DAG가 수행된다는 보장은 없다.
User Interface
- logs를 보고, debugging 등을 할 수 있는 Webserver 형태의 interface가 있다.