从调试过程中的日志发现大量python2/3切换产生的bug,所以建议以python2.7
为airflow的开发、测试环境。
python3虽然可以跑,但主要是airflow的很多插件都滞后更新。一些插件会抛错。(测试环境是3.4.0)
- 底层报错参考
print("" % string) / print "" % string
问题
添加ssh账户遇到问题 Failed to create record. Incorrect padding
。
包依赖问题,需要装crypto
库以及做相关配置:
解决办法:http://airflow.readthedocs.io/en/latest/configuration.html#connections
探究源码后认为airflow1.9默认取的时间是datetime.utcnow(),如果深入修改的话,需要改100+处。问题参考链接。
稳定版1.9.*
默认是UTC时间,最新版开始支持system
或IANA
取时区时间。
目前解决办法,顺应UTC方式写类crontab式约定任务周期,举例:
dag = DAG(
'oozie_daily_reporter',
default_args=default_args,
description='oozie like scheduler for daily report scripts',
schedule_interval='30 17 * * *')
代表北京时间每天凌晨01:30AM
执行。
DAG执行的task,必须写明绝对路径。后续所有脚本一定要控制好目录切换。每个函数,每个task都有必要声明路径。
不能完全依赖airflow前端记时,需要在每个task内,涉及到较长时间的原子操作最好加个date
。
如果存在同名DAG任务会导致airflow崩溃。所以一定不要在dags
目录下直接拷贝任务。
jinjia模板解析问题,调用shell脚本的时候,需要在*.sh
后补一个空格,举例:
task_id='01_onions_first_ready_collecion',
bash_command='/bin/bash /home/test.sh ', #注意这后面有个空格
dag=dag)
调度执行到调用$(which python)脚本的时候,发现环境变量指向到了airflow的pyenv路径,导致依赖失效:
Traceback (most recent call last):
File "./service/collectionStatus.py", line 8, in <module>
from pymongo import MongoClient
ImportError: No module named pymongo
Command exited with return code 1
解决办法: 将调用系统python部分的代码改写成为绝对路径引用。
试图单步回滚某个task时候,前端报出错误:
Only works with the CeleryExecutor, sorry
目前部署方式是LocalExecutor
,似乎不能支持单步回滚,未深入研究其原理。
解决办法: 不需要将整个DAG调用链回滚,修改DAG脚本,让已经执行过的脚本执行一个空脚本。