阿毛
It's me !
想你所想

Airflow源码阅读与理解

本文主要总结本人在阅读Airflow源码后一些理解

1、airflow.models.taskinstance.py

关于execution_date

https://file.blog.humh.cn/2021/04/d2b5ca33bd970f64a6301fa75ae2eb22-2.png

如上图,因为某个DAG任务中使用xcom,所以在xcom db中看到了上面这条数据,惊讶的发现其execution_date竟然是本地时区(北京/上海 UTC+8)的显式,而不是一般的UTC时间,按原有理解应该是“2021-04-21T17:00:00+00:00”,如下图Task Instance中

https://file.blog.humh.cn/2021/04/d2b5ca33bd970f64a6301fa75ae2eb22-3.png

在我的airflow中,基本所有时间都是以UTC为主,所以我对上面这种现象很疑惑,为什么执行前的execution_date就是UTC时区,而执行完成就变成了系统当前时区(这里UTC+8)?
taskinstance.py__init__找到了答案!

https://file.blog.humh.cn/2021/04/d2b5ca33bd970f64a6301fa75ae2eb22-4.png

其中,无论task.has_dag是否true,最终都会被convert_to_utc转换为UTC时间,这也就是为什么我们在Task Instance中看到execution_date变量值为UTC时间

说明

  • task.has_dag是判断Operator是否已分配DAG。
  • timezone.make_aware无论传入task.dag.timezone还是不传,在这里都是一样的,因为task.dag.timezone和不传的情况,最终时区都是对应settings.TIMEZONE,而这个变量也是取得airflow的配置项,如下图,因为“default_timezone”一般会配置成和系统时区一致,就算不配,默认也是取系统时区,如UTC+8。所以这里,无论task.has_dag结果是啥,if else执行后的execution_date是一样的。
https://file.blog.humh.cn/2021/04/d2b5ca33bd970f64a6301fa75ae2eb22-5.png
https://file.blog.humh.cn/2021/04/d2b5ca33bd970f64a6301fa75ae2eb22-6.png
airflow webUI中的“Admin/Configurations”可以查看配置

待继续理解,补充。。。。

humh

文章作者

站长本人,一个憨批!

发表评论

textsms
account_circle
email

想你所想

Airflow源码阅读与理解
本文主要总结本人在阅读Airflow源码后一些理解 1、airflow.models.taskinstance.py 关于execution_date 如上图,因为某个DAG任务中使用xcom,所以在xcom db中看到了上面这条…
扫描二维码继续阅读
2021-04-22