Airflow调度没有更新。

3

我创建了一个基于周运行的DAG。以下是我尝试的内容,它按预期工作。

from datetime import datetime, timedelta
from airflow import DAG
from airflow.operators.bash_operator import BashOperator

SCHEDULE_INTERVAL = timedelta(weeks=1, seconds=00, minutes=00, hours=00)
default_args = {
    'depends_on_past': False,
    'retries': 0,
    'retry_delay': timedelta(minutes=2),
    'wait_for_downstream': True,
    'provide_context': True,
    'start_date': datetime(2020, 12, 20, hour=00, minute=00, second=00)
}

with DAG("DAG", default_args=default_args, schedule_interval=SCHEDULE_INTERVAL, catchup=True) as dag:
    t1 = BashOperator(
        task_id='dag_schedule',
        bash_command='echo DAG',
        dag=dag)

根据计划,它在27日(脚本中的20)运行。由于需求有变化,现在我将开始日期更新为30日(脚本中的23),而不是27日(我的想法是从30日开始,并从那时起每周进行)。当我更改DAG的计划,即将开始日期从27日更改为30日时,DAG没有按照最新的开始日期进行选择,原因不确定。当我删除了DAG(由于这是测试DAG,我可以删除它,在生产环境中我不能删除它),并创建了与最新开始日期(即30日)相同名称的新DAG时,它按照计划运行。

“DAG没有按照最新的开始日期进行选择” - 这是什么意思? - mangusta
开始日期为2020年12月30日,间隔为1周 - 这意味着第一次运行将在2021年1月6日开始。所以我不确定您所指的问题是什么? - Elad Kalif
1
@mangusta DAG在间隔的末尾被触发。要知道何时触发DAG,必须同时提供start_date和interval。 - Elad Kalif
@Elad,你说得对,我一直在处理每小时的间隔,所以忽略了它是每周的事实。没错,它应该在1月6日运行。 - mangusta
@Elad,你说得对,需要将开始日期设置为23号。这里27表示20号,30表示27号,在脚本中是这样的。我在本地测试时已经这么做了,但忘记在此处更新脚本。现在已经更新了脚本。只有当开始日期为23号时,DAG才会触发。使用UTC时区。 - data_addict
显示剩余2条评论
2个回答

8
根据Airflow文档,当需要更改start_date和schedule interval时,需要更改DAG的名称(即dag_id),我遵循以下惯例:我的_dag_v1,my_dag_v2,my_dag_v3,my_dag_v4等等...
  • 更改调度间隔始终需要更改DAG ID,因为以前运行的任务实例与新的调度间隔不匹配
  • 在不更改调度间隔的情况下更改start_date是安全的,但更改为早期的start_date不会为新日期之间的任何时间创建新的DagRuns,因此任务不会自动回填到新日期。如果手动创建DagRuns,则将安排任务,只要DagRun日期在任务start_date和dag start_date之后。
因此,如果更改了start date,则需要更改DAG名称或删除现有DAG,以便它将再次使用相同的名称重新创建(与先前DAG相关的元数据将从元数据中删除)。

1

您定义的DAG将在2021年1月6日触发。

Airflow在间隔的结尾调度任务(参见文档)。

因此,根据您的设置:

SCHEDULE_INTERVAL = timedelta(weeks=1, seconds=00, minutes=00, hours=00)

并且

'start_date': datetime(2020, 12 , 30, hour=00, minute=00, second=00)

这意味着第一次运行将在 2021年1月6日 进行,因为 2020年12月30日 加上 1周 等于 2021年1月6日。请注意,此次运行的 execution_date 将为 2020-12-30

抱歉,我忘记提到了。对于27,我将开始日期设置为20,对于30,我将开始日期设置为23,我忘记更新脚本了。现在已经更新了。 - data_addict

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接