准备
使用anaconda安装py3.7,并将airflow一切依赖等准备好,使用pip命令安装airflow,在这里不做过多阐述。 另外笔者使用的是mysql5.7版本,redis5.0版本,在airflow中配置的是CeleryExcutor,mysql该版本不支持timezone敏感,所以需要注意!
修改代码位置
conda默认安装位置在anaconda的对应env里,下面以我自己的路径做记录。
cd /root/anaconda3/envs/af/lib/python3.7/site-packages/airflow
修改sqlalchemy.py
借鉴在当前目录下的settings.py里对于timezone的导入,将其他涉及TIMEZONE的代码进行调整。
vim utils/sqlalchemy.py
try:
tz = conf.get("core", "default_timezone")
if tz == "system":
utc = pendulum.tz.local_timezone()
else:
utc = pendulum.tz.timezone(tz)
except Exception:
pass
log.info("Configured default timezone %s", utc)
为了启动airflow时观察是否将timezone修改成功,加入log.info("Configured default timezone %s", utc) 一行日志代码,后续修改中也会加入,不做重复阐述。
修改timezone.py
修改两处代码
vim utils/timezone.py
log = logging.getLogger(__name__)
try:
tz = conf.get("core", "default_timezone")
if tz == "system":
utc = pendulum.tz.local_timezone()
else:
utc = pendulum.tz.timezone(tz)
except Exception:
pass
log.info("Configured default timezone %s", utc)
from airflow.configuration import AIRFLOW_HOME, WEBSERVER_CONFIG, conf
import logging
from airflow.logging_config import configure_logging
result = dt.datetime.utcnow()
result= dt.datetime.now()
修改airflow.cfg
切回$AIRFLOW_HOME,然后修改其cfg文件,否则无法触发手动trigger调度。[scheduler]中将allow_trigger_in_future 配置置为True 即可。
[core]
default_timezone = Asia/Shanghai
[scheduler]
allow_trigger_in_future = True
|