Airflow 기초부터 다시

록스블로그·2023년 11월 15일
0

GCP 의 composer나 aws 의 MWAA를 활용하고 bigquery나 glue operator를 활용하여 써본 경험은 가지고 있지만 정작 airflow를 할 줄 아냐고 물어본다면 나는 그거는 아니라고 대답해야한다고 생각하기 때문에 기초부터 다시 공부하고자한다. 추후 토이에서도 사용하기도 해야하고 빠르게 진행하자.

Architecture

아키텍쳐에서 크게 중요한 것은 없지만 Airflow Scheduler가 worker들에게 작업을 분배할 때 queue(celery)를 활용하며 일반적으로 redis 나 rabbitmq를 해당 queue로 활용한다는 사실은 잊으면 안된다.

Scheduler

DAG를 트리거하며 worker들에게 task를 제출하는역할을 하며 1분에 한번 DAG Dir에서 조건에 맞는 task를 executor로 넘겨준다

Executor

  • Local : local process
  • Sequential : local 비슷
  • Celery : Celery를 이용하여 Worker들에게 작업 분배
    * 여기서 Redis가 Celery가 작업을 처리하기 위해 메세지 브로커로 사용되는 것이다.
  • Dask : Python을 이용한 분산작업 관리 시스템을 활용
  • Kubernetes : K8s 환경하에서 테스크를 파드에 스케줄링하는 방식

Medta Database (MySQL)

작업의 저의, 상태, 실행 정보, 결과정보, 로그, audit등을 바라보며 webserver 모두 metadata database를 바라본다

mysql> show tables;
+--------------------------------+
| Tables_in_airflow_db           |
+--------------------------------+
| ab_permission                  |
| ab_permission_view             |
| ab_permission_view_role        |
| ab_register_user               |
| ab_role                        |
| ab_user                        |
| ab_user_role                   |
| ab_view_menu                   |
| alembic_version                |
| callback_request               |
| connection                     |
| dag                            |
| dag_code                       |
| dag_owner_attributes           |
| dag_pickle                     |
| dag_run                        |
| dag_run_note                   |
| dag_schedule_dataset_reference |
| dag_tag                        |
| dag_warning                    |
| dagrun_dataset_event           |
| dataset                        |
| dataset_dag_run_queue          |
| dataset_event                  |
| import_error                   |
| job                            |
| log                            |
| log_template                   |
| rendered_task_instance_fields  |
| serialized_dag                 |
| session                        |
| sla_miss                       |
| slot_pool                      |
| task_fail                      |
| task_instance                  |
| task_instance_note             |
| task_map                       |
| task_outlet_dataset_reference  |
| task_reschedule                |
| trigger                        |
| variable                       |
| xcom                           |
+--------------------------------+

Airflow 작업 흐름도

profile
어려움에 성장하는 데이터 엔지니어

0개의 댓글