Airflow 조그맣게 시작하기 - 다양한 parallelism

햄도·2021년 5월 2일
2

Airflow slowstart

목록 보기
4/6

하나의 task를 가진 dag를 여러 dag_run으로 띄울 수 없는지 찾아보다가 발견하게 된 airflow dag를 더 빠르게 수행하는 법. 에어플로우에서 dag의 성능을 개선할 수 있는 변수들에는 다음과 같은 것들이 있다.

parallelism

에어플로우 클러스터 전체에서 동시에 수행될 수 있는 task 인스턴스의 개수를 결정한다. airflow.cfg에서 설정할 수 있다.

concurrency

각 dag는 concurrency 값을 초과하는 task 인스턴스를 동시에 수행할 수 없다. DAG 생성 시 concurrency를 설정할 수 있으며, 따로 설정하지 않는 경우 airflow.cfg에 설정된 dag_concurrency를 기본값으로 사용한다.

task_concurrency

여러개의 dag_runs가 동시에 수행되는 경우 각 task별 task 인스턴스의 수를 제한하는 변수인것같다. 일부러 여러 dag_runs를 동시에 실행해보지 않아서 이런게 왜 필요한지 잘 모르겠다.

max_active_runs

에어플로우 스케줄러는 하나의 DAG에 대해 max_active_runs보다 많은 DagRuns를 동시에 수행하지 않는다. concurrency와 마찬가지로 따로 설정하지 않는 경우 airflow.cfg에 설정된 max_active_runs_per_dag를 기본값으로 사용한다.

pool

한 pool에 담긴 task들 중 동시에 수행되는 task instance가 일정값을 넘지 않도록 한다.

관련 개념

  • dag vs dag_run
    • dag는 수행해야 하는 task와 그 의존성, 필요한 설정값 등을 포함하는 파이썬 파일로 작성되며 이것이 실제 수행시점에 인스턴스화된 형태가 dag_run이다.
  • task vs task instance
    • task는 DAG 작성 시 같이 정의되며, task가 인스턴스화되어 dag_run에서 실제로 수행될때는 task instance라고 한다. dag, dag_run의 관계와 같다.
  • pool
    • 자원이 한정된 하나의 시스템에 여러 task 인스턴스가 한꺼번에 요청을 보내지 않도록, 임의의 task들(같은 DB에 요청을 보내는 task 등)을 하나의 pool로 정의하고, 동시에 작업되는 양을 제한할 수 있다.

참고

profile
developer hamdoe

0개의 댓글