Skip to content

Instantly share code, notes, and snippets.

@diggzhang
Created April 20, 2018 06:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save diggzhang/a3db0856dbf5ef80b89a797a0712d968 to your computer and use it in GitHub Desktop.
Save diggzhang/a3db0856dbf5ef80b89a797a0712d968 to your computer and use it in GitHub Desktop.

Airflow踩坑相关

1. python2/3版本选择问题

从调试过程中的日志发现大量python2/3切换产生的bug,所以建议以python2.7为airflow的开发、测试环境。

python3虽然可以跑,但主要是airflow的很多插件都滞后更新。一些插件会抛错。(测试环境是3.4.0)

  • 底层报错参考
  • print("" % string) / print "" % string问题

2. WebUI内admin-connection设置

添加ssh账户遇到问题 Failed to create record. Incorrect padding

包依赖问题,需要装crypto库以及做相关配置:

解决办法:http://airflow.readthedocs.io/en/latest/configuration.html#connections

3. Airflow时区问题

探究源码后认为airflow1.9默认取的时间是datetime.utcnow(),如果深入修改的话,需要改100+处。问题参考链接。

稳定版1.9.* 默认是UTC时间,最新版开始支持systemIANA取时区时间。

目前解决办法,顺应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执行。

4. DAG调度的脚本相对路径问题

DAG执行的task,必须写明绝对路径。后续所有脚本一定要控制好目录切换。每个函数,每个task都有必要声明路径。

5. task任务记时

不能完全依赖airflow前端记时,需要在每个task内,涉及到较长时间的原子操作最好加个date

6. DAG不能同名

如果存在同名DAG任务会导致airflow崩溃。所以一定不要在dags目录下直接拷贝任务。

7. BashOperator调用shell

jinjia模板解析问题,调用shell脚本的时候,需要在*.sh后补一个空格,举例:

    task_id='01_onions_first_ready_collecion',
    bash_command='/bin/bash /home/test.sh ', #注意这后面有个空格
    dag=dag)

8. python环境变量问题

调度执行到调用$(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部分的代码改写成为绝对路径引用。

9. Localexecutor无法单步回滚

试图单步回滚某个task时候,前端报出错误:

Only works with the CeleryExecutor, sorry

目前部署方式是LocalExecutor,似乎不能支持单步回滚,未深入研究其原理。

解决办法: 不需要将整个DAG调用链回滚,修改DAG脚本,让已经执行过的脚本执行一个空脚本。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment