해결된 질문
작성
·
43
0
from airflow import DAG
2import pendulum
3import datetime
4from airflow.operators.python import PythonOperator
5import random
6import time
7
8with DAG(
9 dag_id="shedule_3_hour",
10 schedule="3 * * * *",
11 start_date=pendulum.datetime(2023, 3, 1),
12 catchup=False
13) as dag:
14 def select_fruit():
15 fruit = ['APPLE','BANANA','ORANGE','AVOCADO']
16 rand_int = random.randint(0,3)
17 time.sleep(10)
18 print(fruit[rand_int])
19
20 py_t1 = PythonOperator(
21 task_id='py_t1',
22 python_callable=select_fruit
23 )
24
25 py_t1
Airflow Webserver UI DAG Detail페이지에 있는 내용 중 Next dagrun ~ 관련 항목이 이해가 안돼서 질문드립니다.
UTC 기준 10:34입니다. 설명 편의를 위해 현재시간으로 지칭하겠습니다!
Next dagrun이 2024-10-06T10:03:00+00:00 값을 가지는 이유가 궁금합니다.
Next dagrun이 다음 DAG 실행 예정 시간인거같은데 왜 현재실행 보다 과거인지 모르겠습니다.
2024-10-06T11:03:00+00:00이 맞는거 같아서요.
현재 시간이 10:34이고 3분마다 실행.
10:03은 실행완료. 이후 11:03에 실행되어야함.
Next dagrun create after : 다음 DAG은 11:03에 실행되어야하므로 11:03에 DAG Run 생성
(11:03에 실행하는) DAG 기준으로 처리해야하는 데이터 범위는 10:03~11:03이므로 Next dagrun data interval end는 11:03, Next dagrun data interval start는 10:03.
(1) Next dagrun 관련 항목의 정확한 의미와 Next dagrun과 Next dagrun create after 차이를 정확히 몰라서 생기는 문제 같기도 합니다.
(1-1) Next dagrun 관련 항목의 의미
아래 내용이 맞는지 확인 부탁드립니다!
- Next dagrun: 다음 DAG 실행 예정 시간
Next dagrun create after: 다음 DAG 생성 예정 시간
Next dagrun data interval end: 다음 DAG 데이터 간격 종료 시간
Next dagrun data interval start: 다음 DAG 데이터 간격 시작 시간
(1-2) Next dagrun과 Next dagrun create after 차이
Next dagrun 과 Next dagrun create after 은 항상 같나요? Next dagrun create after는 정해진 시간에 생성되고(3분 마다) Next dagrun 은 Next dagrun create after이후에 되는데 즉, DAG run이 생성되고 실행되는거 맞나요?
(Airflow 공식 문서에 Web UI에 있는 항목별 의미를 알 수 있는 페이지가 있는지 찾아보았는데 없어서 질문드립니다!
아래 링크보면 Airflow UI 설명은 간단하게 있는데 항목별 설명은 없네요...)
https://airflow.apache.org/docs/apache-airflow/stable/ui.html
)
답변 1
0
안녕하세요 가보자고님!
Airflow는 날짜를 항상 data_interval_start 기준으로 표현합니다.
우선 캡처해주신 그림에서 왜 Next Dagrun이 왜 10월 6일 10시 3분(UTC)으로 나왔는지 살펴보죠.
아마도 해당 DAG은 UTC 10시 3분에 돌았을 겁니다.
그럼 다음 실행 시각은 UTC 11시 3분이겠죠? 여기까지는 가보자고 님이 생각한 것과 같습니다.
그런데 Airflow는 항상 data_interval_start 기준으로 표현하므로,
UTC 11시 3분에 수행되어야 할 Job의 data_interval_start 는 10시 3분입니다.
그래서 Next Dagrun의 시간이 10시 3분으로 나온겁니다.
즉 Next Dagrun = Next Dagrun data interval start 입니다.
그리고 Next Dagrun Create After 의 의미는 해당 스케줄이 언제부터 실행되는지의 의미인데, UTC 11시 3분에 실행되어야 할 Job 이므로 11시 3분으로 표현된 것입니다.
즉 일반적으로 Next Dagrun Create After = Next Dagrun data interval end 입니다.
일반적으로 우리가 생각할 때 배치시간이 언제인가? 를 생각하면 보통 data interval end 를 보면 됩니다.
그런데 Airflow는 시간 표현을 항상 data_interval_start 로 표현하다보니
둘 간에 간극이 있어서 지금처럼 헷갈리는 경우가 종종 나옵니다.
답변이 충분히 되었는지요?
아직 해소가 안된게 있으면 또 질문 올려주세요^^