2016-09-21 222 views
5

最近我已经测试气流这么多的运行airflow trigger_dag <my-dag>时有一个问题execution_dateairflow trigger_dag execution_date是第二天,为什么?

我已经了解到,execution_date是不是我们认为在首次从here

气流被开发作为ETL需求的解决方案。在ETL世界中, 通常会汇总数据。所以,如果我想总结数据 2016年2月19日,我将在2016年2月20日午夜GMT,这将所有数据之后立即 为2016年2月19日变为可用做。

start_date = datetime.combine(datetime.today(), 
           datetime.min.time()) 

args = { 
    "owner": "xigua", 
    "start_date": start_date 
} 
dag = DAG(dag_id="hadoopprojects", default_args=args, 
      schedule_interval=timedelta(days=1)) 


wait_5m = ops.TimeDeltaSensor(task_id="wait_5m", 
           dag=dag, 
           delta=timedelta(minutes=5)) 

上面的代码是我日常工作的一部分开始,第一项任务就是前实际工作等待5分钟一个TimeDeltaSensor,所以这意味着我的DAG将在2016-09-09T00:05:002016-09-10T00:05:00触发...等等。

在Web UI中,我可以看到像scheduled__2016-09-20T00:00:00之类的东西,并且任务在2016-09-21T00:00:00上运行,根据ETL模型,这似乎是合理的。

但是有一天我的dag没有被触发,原因不明,所以我手动触发它,如果我在2016-09-20T00:10:00上触发它,那么TimeDeltaSensor将在运行前等到2016-09-21T00:15:00

这不是我想要的,我希望它不会在第二天运行在2016-09-20T00:15:00,我试过通过execution_date--conf '{"execution_date": "2016-09-20"}',但它不起作用。

我应该如何处理这个问题?

$ airflow version 
[2016-09-21 17:26:33,654] {__init__.py:36} INFO - Using executor LocalExecutor 
    ____________  _____________ 
____ |__()_________ __/__ /________  __ 
____ /| |_ /__ ___/_ /_ __ /_ __ \_ | /|// 
___ ___ |/_/ _ __/ _// /_/ /_ |/ |//
_/_/ |_/_/ /_/ /_/ /_/ \____/____/|__/ 
    v1.7.1.3 

回答

10

首先,我建议你使用常量start_date,因为动态的将采取行动不可预测基于与您的气流管道由调度评估。

更多有关start_date在这里,我写和整理这一切了一个FAQ条目: http://pythonhosted.org/airflow/faq.html#what-s-the-deal-with-start-date

现在,关于execution_date它被触发时,这是人们在入职一气流共同疑难杂症。气流根据所涵盖的时间表周期的左边界设置execution_date,而不是基于何时发生(这将是该期间的正确界限)。例如,运行schedule='@hourly'任务时,任务将每隔一小时触发一次。在下午2点发生的任务将有一个下午1点的execution_date,因为它假定您在下午2点处理下午1点到下午2点的时间窗口。同样,如果您运行的日常工作中,运行与2016-01-01execution_date将在午夜后不久触发2016-01-02

此左侧装订的标签上印有一个很大的意义在ETL和差分负载来思考时,但在一个简单的,类似cron调度的角度思考时变得混乱。

+0

我不认为这是'start_date'问题,我haved圆润我'start_date'到一天的午夜,我的问题是,'execute_date '当dag被外部触发时被设置到第二天,对此我认为这是不合理的,就像我上面所说的那样。 –

+0

我明白要安排的ETL风格,但我该如何解决我的问题:由于不明原因,我的DAG没有触发,我可以在'execution_date'触发它,除了'trigger_dag'子命令,我可以想'回填',那么如果是这种情况,我们为什么还需要'trigger_dag',这是无稽之谈? –

+0

您是否有计划程序正在运行? '气流调度器' – mistercrunch

1

气流将提供UTC时间。我不确定你在什么时区运行任务。因此,请确保您考虑UTC时区并相应地安排或触发作业。

尝试将您想要触发的时间转换为UTC时间并触发DAG。有用。欲了解更多信息,可以阅读以下链接

https://cwiki.apache.org/confluence/display/AIRFLOW/Common+Pitfalls

相关问题