调度程序间隔的工作不正确,并且在Apache气流中开始时间



找不到任务启动时间的解决方案。我有代码,找不到我错的地方。

当我运行DAG时,25.03,26.03,27.03。任务完成了,但是今天(28.03(任务未在6:48开始。

我尝试使用cron表达式,摆,日期和结果是相同的。本地时间(UTC 3(和气流的时间(UTC(不同。我尝试在"开始日期"或"计划间隔"中每次使用(本地,气流( - 没有结果。

使用:Ubuntu,Airflowv。1.9.0和本地执行人。

emailname = Variable.get('test_mail')
l_start_date = datetime(2018, 3, 25, 6, 48) 
l_schedule_interval = '@daily'
WORKFLOW_DEFAULT_ARGS = {
    'owner': 'owner',
    'depends_on_past': True,
    'start_date': l_start_date,
    'email': emailname,
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 1,
    'retries_delay': timedelta(minutes=1),
}
# initialize the DAG
dag = DAG(
    dag_id='test_dag_mail',
    default_args=WORKFLOW_DEFAULT_ARGS,
    schedule_interval=l_schedule_interval,
    start_date=l_start_date,
 )

调度程序页面的工作很差,可以解释execution_date设置为上一个运行和当前运行之间的时期开始。为什么?好吧,假设每月,每天,每小时的工作都需要阅读从那时到当前间隔时间的所有数据。是的,他们可以将其切换。

示例(将纳米/millis sec切成一个数字(:

DAG start_date DAG schedule_interval Task Started          Task execution_date
2017-12-01     '@daily'              2017-12-02 00:00:02.8 2017-12-01 00:00:00.0
                                     2017-12-03 00:00:01.4 2017-12-02 00:00:00.0
2017-12-01     '@weekly'             2017-12-08 00:00:01.5 2017-12-01 00:00:00.0
                                     2017-12-15 00:00:03.9 2017-12-08 00:00:00.0
2017-12-01     '33 03 * * *'         2017-12-02 03:33:01.6 2017-12-01 03:33:00.0
                                     2017-12-03 03:33:02.2 2017-12-02 03:33:00.0
2017-12-01     '33 03 * * 2'         2017-12-12 03:33:01.7 2017-12-05 03:33:00.0
                                     2017-12-19 03:33:03.1 2017-12-12 03:33:00.0

在最后一个情况下,请注意,开始日期不是间隔中要求的星期二;因为开始时间可能与间隔时间不符,所以我没有对此进行过测试,因此我建议您在每个星期二进行跑步,您的开始时间应该在2017-12-05或2017-之类的星期二 - 11-28。

该2017-12的参考:

#  December 2017
Su Mo Tu We Th Fr Sa
                1  2
 3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

因此,在您的DAG任务中,使用{{ds}}{{execution_date}}运行的上下文中使用Jinja2模板会参考示例的最后一列,而不是datetime.now()在第二列中告诉您的内容。<<<<<<<<<<<<<<<</p>

提供了这些,以便您的任务可以依靠:f(data(= f(f(data((。

如果您运行一次DAG,则最终状态应与运行DAG n 次的情况相同。这样,如果您运行(线性(DAG和5个任务的3个成功,但是任务4失败,任务5从不运行,您可以重新运行整个DAG,任务1-3将预先清洁或覆盖数据,以便输出并未从这些任务的先前成功中更改,然后任务4和5可以成功,您处于最终良好状态。

这是气流的功能:

请注意,如果您在一天的Schedue_interval上运行DAG,则踩踏2016-01-01的跑步将在2016-01-01-01T23:59之后不久触发。换句话说,一旦涵盖的期限结束了。

让我们重复一遍:调度程序在开始日期之后,在期末结束时运行您的作业。

来自:https://airflow.apache.org/scheduler.html

最新更新