airflow 修改中国时区(改airflow源码)
airflow默认使用utc时间,在中国时区需要用+8小时就是本地时间, 下面把airflow全面修改为中国时区,带大家改airflow源码 博主使用airflow版本是1.10.0,其它版本大同小异,参照修改即可
1. 先讲使用 pip安装apache-airflow 的修改方式
- 在airflow家目录下修改airflow.cfg,设置
default_timezone = Asia/Shanghai
- 进入airflow包的安装位置,也就是site-packages的位置,以下修改文件均为相对位置
# 这我安装airflow包的位置(大家自行参考) cd /root/.virtualenvs/af/lib/python3.4/site-packages/
- 修改airflow/utils/timezone.py 3.1 在 utc = pendulum.timezone(‘UTC’) 这行(第27行)代码下添加, from airflow import configuration as conf try: tz = conf.get("core", "default_timezone") if tz == "system": utc = pendulum.local_timezone() else: utc = pendulum.timezone(tz) except Exception: pass 3.2 修改utcnow()函数 (在第69行) 原代码 d = dt.datetime.utcnow() 修改为 d = dt.datetime.now()
- 修改airflow/utils/sqlalchemy.py 在utc = pendulum.timezone(‘UTC’) 这行(第37行)代码下添加
from airflow import configuration as conf
try:
tz = conf.get("core", "default_timezone")
if tz == "system":
utc = pendulum.local_timezone()
else:
utc = pendulum.timezone(tz)
except Exception:
pass
- 修改airflow/www/templates/admin/master.html(第31行)
把代码 var UTCseconds = (x.getTime() + x.getTimezoneOffset()*60*1000); 改为 var UTCseconds = x.getTime(); 把代码 "timeFormat":"H:i:s %UTC%", 改为 "timeFormat":"H:i:s",
- 注释airflow/utils/sqlalchemy.py中的cursor.execute(“SET time_zone = ‘+00:00’”) (第124行)
最后重启airflow-webserver即可
---------------------------------------------------分割线---------------------------------------------------
2. 源码安装apache-airflow方式
- 去下载 airflow的zip包或者克隆到本地
- cd incubator-airflow
- 修改airflow/utils/timezone.py (是的,你没看错,回到上面的第三步了,别急,跟着改就行) 3.1 在 utc = pendulum.timezone(‘UTC’) 这行(第27行)代码下添加, from airflow import configuration as conf try: tz = conf.get("core", "default_timezone") if tz == "system": utc = pendulum.local_timezone() else: utc = pendulum.timezone(tz) except Exception: pass 3.2 修改utcnow()函数 (在第69行) 原代码 d = dt.datetime.utcnow() 修改为 d = dt.datetime.now()
- 修改airflow/utils/sqlalchemy.py 在utc = pendulum.timezone(‘UTC’) 这行(第37行)代码下添加
from airflow import configuration as conf
try:
tz = conf.get("core", "default_timezone")
if tz == "system":
utc = pendulum.local_timezone()
else:
utc = pendulum.timezone(tz)
except Exception:
pass
- 修改airflow/www/templates/admin/master.html(第31行)
把代码 var UTCseconds = (x.getTime() + x.getTimezoneOffset()*60*1000); 改为 var UTCseconds = x.getTime(); 把代码 "timeFormat":"H:i:s %UTC%", 改为 "timeFormat":"H:i:s",
- 注释airflow/utils/sqlalchemy.py中的cursor.execute(“SET time_zone = ‘+00:00’”) (第124行)
- 使用python setup.py install 安装
- 初始化airflow
airflow initdb
- 修改airflow家目录下的airflow.cfg,设置
default_timezone = Asia/Shanghai
这样就全部改完了,本篇博客主要讲的是把airflow的时区改为中国地区, airflow的安装请移步 不过建议大家还是使用pip 安装apache-airflow,然后再修改源码的方式 这里有我改好的 大家考下来直接使用 python setup.py install 安装就可以了
结束,踩坑不易,求赞!
