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
위의 블로그를 보면, 예시가 1:1 기준으로 작성되어 있다. 그러나 나는 n:1 과 1:1이 섞여 있는 구조가 필요하였다.
externalTaskSensor을 사용하여 다양한 dag구조를 작성해보았다.
'Infra > MLOps' 카테고리의 다른 글
[Mlflow] MLflow 란? (0) | 2023.04.03 |
---|---|
[MLOps][Infra]MLOps에 jenkins CI/CD 적용 가능한 구조 고르기 (0) | 2023.04.03 |
[airflow][crontab] 시간 설정 (0) | 2023.04.03 |
[airflow] mysql연결하기 (0) | 2023.04.03 |
[airflow] slack 연결하기-많은 dag에 적용 (0) | 2023.04.03 |