본문 바로가기

Infra/MLOps

[airflow] Dag간 연결 하기 (Connecting between Dags) ⏰

dag를 설계할 때, dag 끼리 종속성을 갖지 않는 것이 가장 좋지만 어쩔 수 없이 종속성을 만들어야 하는 경우가 있다.

아래와 같은 상황일 때, dag의 종속성을 갖는 것이 유용하게 사용 된다.

  • 두 dag는 종속되지만 일정이다름
  • 두 dag는 종속 되지만 서로 다른 팀에서 소유
  • task는 다른 task에 종속되지만 execution_date가 다름

여기서는 dag에서 다른 dag를 호출하는 방법을 설명한다.

-> subDAG를 사용하여 dag 종속성을 처리할 수도 있지만, subDAG가 성능 문제를 일으킬 수도 있으므로 dag 종속성으로 처리하는 것을 권장 

-> airflow2.0에서는 subdag 사용을 권장 하지 않음.

 

TriggerDagRunOperator

-> 해당 operator를 사용하면 동일한 airflow 환경에서 다른 dag를 실행할 수 있다.

triggerDagRunOperator 사용 하기 좋은 상황

1. 업스트림 dag와 다운 dag가 1:1 관계

2. 다운스트림 dag의 결과가 업스트림 dag의 task의 상태에 영향을 주어야함

3. 개발된 이후, 호출 해야 하는 다운스트림 dag가 추가 될 가능성이 적음

4. 다운스트림 dag는 업스트림 dag가 실행될 때 바로 실행이 되어야 함

ExternalTaskSensor

-> externalTaskSensor를 호출 될 dag내에 추가하는것. 호출 될 dag는 부모 dag가 완료 될 때까지 시작하지 않고 대기함.

externalTaskSensor 사용 하기 좋은 상황

1. 업스트림 dag와 다운스트림 dag의 관계가 N:1관계

2. 다운스트림 dag의 결과가 업스트림 dag의 상태에 영향을 주지 않음

3. 개발된 이후, 호출해야 하는 다운스트림 dag가 추가될 가능성이 큼

4. 업스트림 dag의 schedule_interval과 다운스트림 dag의 schedule_interval이 동일함 

 

 

 

아래의 사이트에 TriggerDagRunOoperator와 externalTaskSensor에 대해 자세히 설명이 적혀있음

참고 : https://brownbears.tistory.com/593

 

[Airflow] DAG에서 다른 DAG 호출하기 (DAG 종속성)

dag를 설계할 때 dag끼리 종속성을 갖지 않는 것이 가장 좋지만 어쩔 수 없이 종속성을 만들어야 하는 경우가 있습니다. 아래와 같은 상황일 때, dag의 종속성을 갖는 것이 유용하게 사용됩니다. 두

brownbears.tistory.com

 

위의 블로그를 보면, 예시가 1:1 기준으로 작성되어 있다. 그러나 나는 n:1 과 1:1이 섞여 있는 구조가 필요하였다.

externalTaskSensor을 사용하여 다양한 dag구조를 작성해보았다.