Airflow 首次打开时,“气流”将启动两次DAG运行
当我在10月25日17:23左右首次启动Airflow Web服务器和计划程序,并打开DAG时,我可以看到它开始了10月23日和10月24日的两次运行:Airflow 首次打开时,“气流”将启动两次DAG运行,airflow,Airflow,当我在10月25日17:23左右首次启动Airflow Web服务器和计划程序,并打开DAG时,我可以看到它开始了10月23日和10月24日的两次运行: RUN 1 -> 10-23T17:23 RUN 2 -> 10-24T17:23 以下是我的DAG配置: default_args = { 'owner': 'airflow', 'depends_on_past': False, 'start_date': '2019-01-01', 'retr
RUN 1 -> 10-23T17:23
RUN 2 -> 10-24T17:23
以下是我的DAG配置:
default_args = {
'owner': 'airflow',
'depends_on_past': False,
'start_date': '2019-01-01',
'retries': 0,
}
dag = DAG(
'my_script',
default_args=default_args,
schedule_interval=datetime.timedelta(days=1),
catchup=False,
)
由于它超过了开始日期+计划间隔
,并且我已经设置了catchup=False
,我希望它立即启动一次DAG运行,但我不希望它运行两次
- 为什么要执行两次DAG运行
- 我如何防止这种行为
- 我不确定,但这是我最好的猜测-
简言之,可能是气流是如何形成的,解决方法是将您的
开始日期修改为昨天
TL;博士
我同意当你开机的时候,启动1个dag,持续10-24小时听起来更自然
但是,根据您的dag运行,运行1是10-23。
这对我来说意味着初始化第一次运行是不正确的,我已经查看了调度程序代码
我对这条线有点怀疑
它位于创建dag运行并设置运行开始日期的函数内
# The logic is that we move start_date up until
# one period before, so that timezone.utcnow() is AFTER
# the period end, and the job can be created...
now = timezone.utcnow()
# This returns current time + schedule_interval. In your example, this will be tomorrow.
next_start = dag.following_schedule(now)
# This returns current time - schedule_interval. In your example, this will be yesterday.
last_start = dag.previous_schedule(now)
# tomorrow <= today should return False
if next_start <= now:
new_start = last_start
else:
# and this will return last_start - schedule_interval which means 2 days ago.
# wondering if this is intended to be dag.previous_schedule(next_start)???
new_start = dag.previous_schedule(last_start)
#逻辑是我们将开始日期提前到
#前一个时段,因此timezone.utcnow()在后一个时段
#周期结束,可以创建作业。。。
now=timezone.utcnow()
#返回当前时间+计划间隔。在你的例子中,这将是明天。
下一个\u开始=dag。下一个\u计划(现在)
#这将返回当前的时间计划间隔。在你的例子中,这将是昨天。
上一次开始=上一次计划(现在)
#明天你是对的,如果我用昨天(我的例子是2019-10-24)作为开始日期,那么只有一个DAG被执行!如果你认为这是值得提出的气流,请放心。不想窃取你的发现;)+1、好的。我也面临着同样的问题,我想了解为什么它返回2个周期而不是一个(最新!)执行时间返回我遇到了同样的问题,重新启用暂停的DAG(catchup=False),实际上创建了2个DAG运行,而不是1@EmmaAlexG,我们可以向气流团队报告和/或提交PR吗?