airflow 修改中国时区(改airflow源码)

airflow默认使用utc时间,在中国时区需要用+8小时就是本地时间, 下面把airflow全面修改为中国时区,带大家改airflow源码 博主使用airflow版本是1.10.0,其它版本大同小异,参照修改即可

1. 先讲使用 pip安装apache-airflow 的修改方式

  1. 在airflow家目录下修改airflow.cfg,设置
default_timezone = Asia/Shanghai
  1. 进入airflow包的安装位置,也就是site-packages的位置,以下修改文件均为相对位置
# 这我安装airflow包的位置(大家自行参考)
cd /root/.virtualenvs/af/lib/python3.4/site-packages/
  1. 修改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()
  2. 修改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
  1. 修改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",
  1. 注释airflow/utils/sqlalchemy.py中的cursor.execute(“SET time_zone = ‘+00:00’”) (第124行)

最后重启airflow-webserver即可

---------------------------------------------------分割线---------------------------------------------------

2. 源码安装apache-airflow方式

  1. 去下载 airflow的zip包或者克隆到本地
  2. cd incubator-airflow
  3. 修改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()
  4. 修改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
  1. 修改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",
  1. 注释airflow/utils/sqlalchemy.py中的cursor.execute(“SET time_zone = ‘+00:00’”) (第124行)
  2. 使用python setup.py install 安装
  3. 初始化airflow
airflow initdb
  1. 修改airflow家目录下的airflow.cfg,设置
default_timezone = Asia/Shanghai

这样就全部改完了,本篇博客主要讲的是把airflow的时区改为中国地区, airflow的安装请移步 不过建议大家还是使用pip 安装apache-airflow,然后再修改源码的方式 这里有我改好的 大家考下来直接使用 python setup.py install 安装就可以了


结束,踩坑不易,求赞!

经验分享 程序员 微信小程序 职场和发展