Airflow Webserver worker启动失败 重启后反复报WORKER TIMEOUT错误
问题解决方案
核心根因:你当前使用SQLite作为Airflow的元数据库,SQLite本身不支持多线程并发访问,仅适用于本地单进程测试场景。之前工作区崩溃后产生的孤儿任务、元数据脏记录也会导致worker启动后阻塞,触发超时被强制终止。
具体操作步骤
- 第一步:清理所有Airflow残留进程
# 杀死所有Airflow相关进程 ps -ef | grep airflow | awk '{print $2}' | xargs kill -9 # 确认无残留进程 ps -ef | grep airflow
上述命令输出为空即代表清理完成。
- 第二步:修改airflow.cfg配置适配SQLite限制
找到Airflow配置文件(默认路径为~/airflow/airflow.cfg),调整以下参数:
parsing_processes = 1 parallelism = 1 worker_concurrency = 1 dag_concurrency = 1 max_active_runs_per_dag = 1
与日志中提示的SQLite仅支持单线程的要求对齐,避免多线程并发导致的阻塞。
- 第三步:清理异常元数据
如果不需要保留历史运行记录,执行以下命令重置元数据库:
# 可先备份默认位置的SQLite文件再执行 cp ~/airflow/airflow.db ~/airflow/airflow.db.bak airflow db reset
执行过程中输入y确认重置,会清空所有异常的调度器记录、孤儿任务记录。
- 第四步:重新启动服务
先在终端启动调度器:
airflow scheduler
再新开一个终端启动web服务:
airflow webserver
长期使用建议
SQLite仅适合本地开发测试使用,若需要稳定运行Airflow,建议将元数据库替换为PostgreSQL或MySQL,即可支持多并发配置,不会出现这类并发限制导致的超时问题。
内容的提问来源于stack exchange,提问作者av abhishiek
相关产品推荐
相关产品推荐

