|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
 
                    
                     
                    
                 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号 
