Airflow自带的时区是UTC时区,通常跟当前的环境时区不一样,因此我们需要对时区进行修改。
1、修改airflow的配置文件airflow.cfg
default_timezone = Asia/Shanghai
2、进入airflow包的安装位置,也就是site-packages的位置,由于我们airflow环境是部署在容器里面的,site-packages的位置通常在这里容器的
/usr/local/lib/python3.7/site-packages/
3、修改airflow/utils/timezone.py
timezone.py 文件所在目录/usr/local/lib/python3.7/site-packages /airflow/utils
在 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
修改utcnow()函数:
原代码 d = dt.datetime.utcnow()
修改为 d = dt.datetime.now()
4、修改airflow/utils/sqlalchemy.py
在utc = pendulum.timezone(‘UTC’) 这行代码下添加:
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
5、改airflow/www/templates/admin/master.html
该文件所在目录:
/usr/local/lib/python3.7/site-packages/airflow/www/templates/admin
把代码 var UTCseconds = (x.getTime() + x.getTimezoneOffset()*60*1000);
改为 var UTCseconds = x.getTime();
把代码 "timeFormat":"H:i:s %UTC%",
改为 "timeFormat":"H:i:s",
7、修改Docker容器的时间和宿主时间一致
在容器中修改下/etc/localtime文件的名称,避免冲突
cd /etc/
mv localtime localtime_bak
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
查看容器和宿主机的时间,将会看到两个时间一致
8、最后重启airflow-webserver即可