airflow默认的时间是utc时间,如图所示:
系统时间是本地时间(北京时间)
两个时间不一致,需要修改时差:
Airflow 默认使用UTC时间,在中国时区需要+8小时。将UTC修改为中国时区,需要修改Airflow源码。
(注:在实际工作中也可以不用修改,考虑时差问题即可,如果想要修改,按照如下步骤进行)
7.1 修改$AIRFLOW_HOME/airflow.cfg 文件
vim $AIRFLOW_HOME/airflow.cfg
#约 20行
default_timezone = Asia/Shanghai
#约464行
default_ui_timezone = Asia/Shanghai
7.2 修改timezone.py
vim /usr/local/airflow/tutorial-env/lib/python3.7/site-packages/airflow/utils/timezone.py
第27行注释,增加29-37行:
注意缩进格式
utc = pendulum.tz.timezone('UTC')
from airflow import configuration
try:
tz = configuration.conf("core","default_timezone")
if tz == "system":
utc = pendulum.local_timezone()
else:
utc = pendulum.timezone(tz)
except Exception:
pass
修改utcnow()函数(注释掉72行,增加73行内容)
7.3 修改airflow/utils/sqlalchemy.py
find / -name sqlalchemy.py
vim /usr/local/airflow/tutorial-env/lib/python3.7/site-packages/airflow/utils/sqlalchemy.py
7.4 修改airflow/www/templates/admin/master.html
#查找文件位置
find / -name master.html 2> /dev/null
#进入airflow包的安装位置
cd /usr/local/airflow/tutorial-env/lib/python3.7/site-packages/airflow/www/templates
#修改airflow/www/templates/admin/master.html
cd airflow/www/templates/admin/
vim master.html
7.5 重启airflow
ps -ef |grep airflow
对应的进程比较多,一个一个的杀比较麻烦。
#关闭 airflowwebserver 对应的服务
ps -ef |grep 'airflow-webserver' | grep -V'grep' | awk '{print $2}' | xargs -i kill -9 {}
ps -ef |grep 'airflow-webserver' | awk'{print $2}' | xargs -i kill -9 {}
#关闭airflowscheduler 对应的服务
ps -ef |grep 'airflow' |grep 'scheduler' |awk '{print $2}' | xargs -i kill -9 {}
#删除对应的pid文件
cd $AIRFLOW_HOME
rm -rf airflow-scheduler.*
#重启服务(在python3.7虚拟环境中执行)
airflow webserver --port 8080 -D
airflow scheduler -D
7.6 再次登录web页面
结果显示:Web UI上的时间已经修改成本地时间了。