由于执行日期和开始日期,无法运行 Airflow 任务
Posted
技术标签:
【中文标题】由于执行日期和开始日期,无法运行 Airflow 任务【英文标题】:Unable to run Airflow Tasks due to execution date and start date 【发布时间】:2018-02-22 16:18:03 【问题描述】:每当我尝试运行 DAG 时,它都会处于运行状态,但任务不会运行。我已将开始日期设置为 datetime.today() 并将我的计划间隔设置为“* * * * *”。手动触发运行会启动 dag,但任务不会运行,原因是:
执行日期是 2017-09-13T00:00:00,但这早于任务的开始日期 2017-09-13T16:20:30.363268。
我尝试了各种计划间隔组合(例如每天的特定时间)以及等待触发 dag 和手动触发。似乎没有任何效果。
【问题讨论】:
尝试将 DAG 的开始日期硬编码为datetime(2017, 9, 12)
,而不是 datetime.today()
。 FAQ 对此有更多详细信息。
如果您希望手动触发,您可以通过设置 schedule_interval:none 来禁用并手动触发 dag。如果您希望它被安排,请确保 worker 和 schedular 正在运行。以下设置对我来说很好(每 2 分钟运行一次): start_date: datetime.utcnow()-timedelta(minutes=2), schedule_interval: timedelta(minutes=2)
不幸的是,我已经尝试了上述所有建议,但似乎没有任何效果。 @VinodVutpala 使用您的开始日期和间隔,我仍然得到:执行日期是 2017-09-14T00:00:00,但这是在任务的开始日期 2017-09-14T13:16:33.998064 之前。但是现在我也得到:任务实例的 dagrun 不存在:未知原因。我想知道这是否是工人问题。
【参考方案1】:
尝试重新启动调度程序,这对我有用。
【讨论】:
这个问题背后的解释是什么?【参考方案2】:google 发给我,我遇到了和你一样的问题。我被定义为今天的start_date
'start_date': datetime.today()
当我使用较旧的日期(例如 7 天前)时,问题已解决
seven_days_ago = datetime.combine(datetime.today() - timedelta(7),
datetime.min.time())
args =
'owner': 'airflow',
'start_date': seven_days_ago,
'depends_on_past': False,
我找到了这个解释Airflow Docs
【讨论】:
【参考方案3】:首先start_date
是一个任务属性;但一般情况下,它是在default_args
中设置的,和dag 属性一样使用。
消息很清楚,如果一个任务的execution_date
在该任务的start_date
之前,则不能调度。可以将start_date
设置得更小:
import datetime
default_args =
'start_date': datetime.datetime(2019, 1, 1) # hard coded date
或
import airflow
default_args =
'start_date': airflow.utils.dates.days_ago(7) # 7 days ago
来自Airflow Documentation
请注意,如果您在一天的 schedule_interval 上运行 DAG,则标记为 2016-01-01 的运行将在 2016-01-01T23:59 之后不久触发。换言之,作业实例会在其涵盖的时间段结束后启动。
让我们重复一遍调度程序在开始日期之后一个 schedule_interval 的时间段结束时运行您的作业。
因此,当您安排 dag 时,任何 dag_run 的 execution_date
都将小于其开始时间。每天会有24小时的差异。
我们可以说开始时间 = execution_date
+ schedule_interval
(开始时间不是start_date
,只是dag run的开始时间)
【讨论】:
"我们可以说开始时间 = execution_date + schedule_interval" 这意味着开始时间 > execution_date。你的意思是反过来吗?开始时间肯定是时间轴上的第一个点,所有 execution_dates 都在它之后。 我的意思是“开始时间”是“特定 dag 运行的开始时间”。示例:我有一个每日计划的 dag,有一个从 2020-11-23T00:00 开始的 dag 运行,它的 execution_date 将是 2020-11-22T00:00。公式:2020-11-23T00:00 = 2020-11-22T00:00 + 24h (schedule_interval)。换句话说:DAG 是周期性运行的,execution_date 是周期的开始,而 DAG 在周期结束时开始运行,这里是“开始时间”。 (代码中不是start_date)以上是关于由于执行日期和开始日期,无法运行 Airflow 任务的主要内容,如果未能解决你的问题,请参考以下文章