AirFlow常见问题汇总
airflow常见问题的排查记录如下:
1,airflow怎么批量unpause
大量的dag任务
普通少量任务可以通过命令airflow unpause dag_id
命令来启动,或者在web界面点击启动按钮实现,但是当任务过多的时候,一个个任务去启动就比较麻烦。其实dag信息是存储在数据库中的,可以通过批量修改数据库信息来达到批量启动dag任务的效果。假如是用mysql作为sql_alchemy_conn
,那么只需要登录airflow数据库,然后更新表dag的is_paused字段为0即可启动dag任务。
示例: update dag set is_paused = 0 where dag_id like "benchmark%";
2,airflow的scheduler进程在执行一个任务后就挂起进入假死状态
出现这个情况的一般原因是scheduler调度器生成了任务,但是无法发布出去。而日志中又没有什么错误信息。
可能原因是Borker连接依赖库没安装:
如果是redis作为broker则执行pip install apache‐airflow[redis]
如果是rabbitmq作为broker则执行pip install apache-airflow[rabbitmq]
还有要排查scheduler节点是否能正常访问rabbitmq。
3,当定义的dag
文件过多的时候,airflow的scheduler节点运行效率缓慢
airflow的scheduler默认是起两个线程,可以通过修改配置文件airflow.cfg
改进:
[scheduler]
# The scheduler can run multiple threads in parallel to schedule dags.
# This defines how many threads will run.
#默认是2这里改为100
max_threads = 100
4,airflow日志级别更改
$ vi airflow.cfg
[core]
#logging_level = INFO
logging_level = WARNING
NOTSET < DEBUG < INFO < WARNING < ERROR < CRITICAL
如果把log的级别设置为INFO, 那么小于INFO级别的日志都不输出, 大于等于INFO级别的日志都输出。也就是说,日志级别越高,打印的日志越不详细。默认日志级别为WARNING。
注意: 如果将logging_level
改为WARNING
或以上级别,则不仅仅是日志,命令行输出明细也会同样受到影响,也只会输出大于等于指定级别的信息,所以如果命令行输出信息不全且系统无错误日志输出,那么说明是日志级别过高导致的。
5,AirFlow: jinja2.exceptions.TemplateNotFound
这是由于airflow使用了jinja2作为模板引擎导致的一个陷阱,当使用bash命令的时候,尾部必须加一个空格:
- Described here : see below. You need to add a space after the script name in cases where you are directly calling a bash scripts in the
bash_command
attribute ofBashOperator
- this is because the Airflow tries to apply a Jinja template to it, which will fail.
t2 = BashOperator(
task_id='sleep',
bash_command="/home/batcher/test.sh", // This fails with `Jinja template not found` error
#bash_command="/home/batcher/test.sh ", //