【问题标题】:Understanding Airflow's execution_date and schedule了解 Airflow 的 execution_date 和 schedule
【发布时间】:2020-04-14 10:41:39
【问题描述】:

来自 cron 的气流新手,试图了解 execution_date 宏如何应用于调度系统以及何时手动触发。我已经阅读了常见问题解答,并设置了一个时间表,以按照我预期的方式执行,并填写正确的execution_date 宏。

我想在世界标准时间星期四上午 10 点每周运行我的每日任务。有时我会手动运行它。我的理解是 dag 的开始日期应该比我希望 dag 开始的实际日期晚一个时期。因此,为了今天在 2020 年 4 月 9 日执行 dag,使用 20020 年 4 月 9 日 execution_date 我设置了以下默认值:

default_args = {
    'owner': 'airflow',
    'start_date': dt.datetime(2020, 4, 2),
    'concurrency': 4,
    'retries': 0
}

而dag定义为:

with DAG('my_dag',
        catchup=False,
        default_args=default_args,
        schedule_interval='0 10 * * 4',
        max_active_runs=1,
        concurrency=4,
         ) as dag:

opr_exc = BashOperator(task_id='execute_dag',bash_command='/path/to/script.sh --dt {{ ds_nodash }}')

虽然 dag 在今天 4 月 9 日准时执行,但它使用 20200402 而不是 20200409 的 ds_nodash 执行。我想我仍然很困惑,因为追赶已关闭,开始日期是一周前,因此我期待20200409。

现在,我找到了另一个答案here,它基本上解释了execution_date 处于周期的开始,并且总是落后一个周期。那么今后我应该使用next_ds_nodash 吗?这不会对手动触发的 dag 造成问题,因为 execution_date 在按需运行时会按预期工作。还是手动触发时next_ds_nodash 转换为ds_nodash

问题:是否有一种快乐的媒介可以让我在计划运行和手动触发时正确地将execution_date 宏传递给我的每周运行 dag?这里的最佳做法是什么?

【问题讨论】:

    标签: airflow airflow-scheduler


    【解决方案1】:

    经过更多的研究和测试,在手动触发 dag 时,next_ds_nodash 确实看起来等同于ds_nodash

    因此,如果您处于类似情况,请执行以下操作以正确安排您的每周运行作业(使用可选的手动触发器)

    1. start_date 设置在您实际想要开始的日期前一周
    2. 相应地配置schedule_interval,以便在您想要运行作业时进行
    3. 使用next 执行日期宏来获取作业运行时的预期当前执行日期。

    这对我有用,但我不必处理任何追赶/回填选项,所以 YMMV。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-15
      • 1970-01-01
      • 2018-12-06
      • 2020-12-07
      • 1970-01-01
      • 2021-12-11
      • 2019-09-30
      • 1970-01-01
      相关资源
      最近更新 更多