|NO.Z.00015|——————————|Deployment|——|Hadoop&PB级离线数仓.v02|——|Airflow.v02|修改默认时区|
一、修改时区
### --- 修改时区
~~~ Airflow默认使用UTC时间,在中国时区需要用+8小时。
~~~ 将UTC修改为中国时区,需要修改Airflow源码。
### --- 在修改 $AIRFLOW_HOME/airflow.cfg 文件
(env) [root@hadoop02 ~]# vim /opt/yanqi/servers/airflow/airflow.cfg
default_timezone = Asia/Shanghai # 约 65 行
### --- 修改 timezone.py
~~~ # 进入Airflow包的安装位置
(env) [root@hadoop02 ~]# cd /opt/yanqi/servers/python3.6/bin/env/lib/python3.6/site-packages/
~~~ # 修改airflow/utils/timezone.py
(env) [root@hadoop02 site-packages]# cd airflow/utils
(env) [root@hadoop02 utils]# vim timezone.py
~~~ # 方式一:第27行注释,增加27-37行:
~~~ 27行开始
# 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
~~~ 37行结束
~~~ # 方式二:
~~~ 备注:以上的修改方式有警告,可以使用下面的方式(推荐):
~~~ 27行开始
# utc = pendulum.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
~~~ 37行结束
~~~ # 修改utcnow()函数 (注释掉72行,增加73行内容)
~~~ 61行开始
def utcnow():
"""
Get the current date and time in UTC
:return:
"""
# pendulum utcnow() is not used as that sets a TimezoneInfo object
# instead of a Timezone. This is not pickable and also creates issues
# when using replace()
# d = dt.datetime.utcnow()
# d = d.replace(tzinfo=utc)
d = dt.datetime.now()
d = d.replace(tzinfo=utc)
return d
~~~ 76行结束
~~~ # 修改 airflow/utils/sqlalchemy.py
~~~ # 进入Airflow包的安装位置
(env) [root@hadoop02 ~]# cd /opt/yanqi/servers/python3.6/bin/env/lib/python3.6/site-packages/
~~~ # 修改 airflow/utils/sqlalchemy.py
(env) [root@hadoop02 site-packages]# cd airflow/utils
(env) [root@hadoop02 utils]# vim sqlalchemy.py
~~~ # 方式一:修改时区参数
~~~ 在38行之后增加 39 - 48 行的内容:
~~~ 38行开始
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
~~~ 48行结束
~~~ # 方式二:修改时区参数
~~~ 备注:以上的修改方式有警告,可以使用下面的方式(推荐):
~~~ 38行开始
utc = pendulum.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
~~~ 48行结束
### --- 修改airflow/www/templates/admin/master.html
~~~ # 进入Airflow包的安装位置
(env) [root@hadoop02 ~]# cd /opt/yanqi/servers/python3.6/bin/env/lib/python3.6/site-packages/
~~~ # 修改 airflow/www/templates/admin/master.html
(env) [root@hadoop02 site-packages]# cd airflow/www/templates/admin
(env) [root@hadoop02 admin]# vim master.html
~~~ # 将第40行修改为以下内容:
var UTCseconds = x.getTime(); # 第40行
~~~ # 将第43行修改为以下内容:
"timeFormat":"H:i:s", # 第43行
二、重启Airflow服务
### --- 重启airflow webserver
~~~ # 停止airflow服务
~~~ 关闭 airflow webserver 对应的服务
(env) [root@hadoop02 ~]# ps -ef | grep 'airflow-webserver' | grep -v 'grep' | awk '{print $2}' | xargs -i kill -9 {}
~~~ 关闭 airflow scheduler 对应的服务
(env) [root@hadoop02 ~]# ps -ef | grep 'airflow' | grep 'scheduler' | awk '{print $2}' | xargs -i kill -9 {}
### --- 删除对应的pid文件
~~~ 正常停止的话,这两个文件会关闭,
~~~ 若是通过kill掉的,需要把这两个pid文件删除掉
(env) [root@hadoop02 ~]# cd $AIRFLOW_HOME
(env) [root@hadoop02 airflow]# rm -rf *.pid
~~~ # 重启服务(在python3.6虚拟环境中执行)
(env) [root@hadoop02 ~]# airflow scheduler -D
(env) [root@hadoop02 ~]# airflow webserver -D
### --- Airflow的web界面
~~~ 修改时区之前时间参数
~~~ 修改时区之后时间参数


Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
分类:
dov001-PB离线数仓
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」