最近我测试了气流这么多,execution_date在运行时有一个问题airflow trigger_dag <my-dag>.
我知道这execution_date不是我们第一次从这里想到的:
Airflow是作为ETL需求的解决方案而开发的.在ETL世界中,您通常会汇总数据.所以,如果我想总结2016-02-19的数据,我会在格林威治标准时间2016-02-20午夜进行,这将在2016-02-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))
Run Code Online (Sandbox Code Playgroud)
上面的代码是我日常工作流程的开始部分,第一个任务是TimeDeltaSensor在实际工作之前等待另外5分钟,所以这意味着我的dag将被触发2016-09-09T00:05:00,2016-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
Run Code Online (Sandbox Code Playgroud)
小智 29
首先,我建议您使用常量start_date,因为动态的会根据您的气流管道不可预测地执行,并由调度程序进行评估.
有关start_date此处的详细信息,请参阅我编写的常见问题解答条目并对其进行排序:https:
//airflow.apache.org/faq.html#what-s-the-deal-with-start-date
现在,execution_date在它被触发的时候,这是人们在Airflow上登机的常见问题.气流execution_date根据它所覆盖的计划周期的左边界而设定,而不是基于它何时触发(这将是该期间的右边界).schedule='@hourly'例如,当运行任务时,任务将每小时触发一次.下午2点发射的任务将有一个execution_date下午1点,因为它假设您正在下午2点处理下午1点到下午2点的时间窗口.同样,如果您运行的日常工作中,与运行execution_date的2016-01-01将在午夜后不久触发2016-01-02.
在考虑ETL和差异负载时,这种左边标记很有意义,但在考虑简单的类似cron的调度程序时会让人感到困惑.