Airflow Papermill Operator任务运行60分钟后被外部标记为skipped问题咨询
这个报错是Airflow默认的任务执行超时限制触发的,系统默认最长允许单个任务执行3600秒(1小时),超时后会主动发送SIGTERM信号终止任务,对应你看到的日志。你可以按以下不同场景调整配置:
1 调整单个任务级别的超时配置(最灵活,仅针对长任务生效)
如果只有运行Jupyter notebook的这部分任务需要更长执行时间,直接在对应任务的定义参数中添加execution_timeout即可,该参数优先级高于全局配置,修改DAG代码后重新发布即可生效,无需重启Airflow服务。
示例代码如下:
from datetime import timedelta # 以下为你定义的运行jupyter notebook的任务,以BashOperator为例,PapermillOperator等其他Operator配置方式一致 run_notebook = BashOperator( task_id="execute_my_notebook", bash_command="jupyter nbconvert --execute /opt/notebooks/your_notebook.ipynb", # 按需调整超时时间,示例为设置3小时超时 execution_timeout=timedelta(hours=3), dag=dag )
2 调整全局默认的任务超时配置(适用于所有任务都需要更长执行时间的场景)
修改Airflow的核心配置,将默认的全局任务超时延长到你需要的时长:
- 直接修改
airflow.cfg配置文件,找到[core]段的task_execution_timeout配置项,默认值为3600,单位为秒,修改为你需要的数值即可,示例为设置3小时:
[core] task_execution_timeout = 10800
- 如果是Docker/docker-compose部署的Airflow,可以直接通过环境变量调整,无需修改配置文件,在docker-compose.yml的环境变量段添加以下配置即可:
services: airflow-scheduler: environment: - AIRFLOW__CORE__TASK_EXECUTION_TIMEOUT=10800 airflow-worker: environment: - AIRFLOW__CORE__TASK_EXECUTION_TIMEOUT=10800
修改全局配置后需要重启Airflow的scheduler、worker组件生效。
3 排查其他可能的超时限制
如果修改上述配置后仍然出现1小时超时,需要检查以下配置项:
- 如果你使用的是CeleryExecutor,需要同时调整Celery的任务超时限制,对应配置为
AIRFLOW__CELERY__TASK_SOFT_TIME_LIMIT和AIRFLOW__CELERY__TASK_TIME_LIMIT,默认值均为3600秒,按需调整为更长的时间即可。 - 排查Docker容器的运行配置,确认没有设置
--stop-timeout这类容器级别的超时限制,默认的容器停止等待时间为10秒,不会触发1小时级别的超时。 - 如果你使用KubernetesExecutor运行任务,需要检查Pod的
activeDeadlineSeconds配置,确认没有设置1小时的Pod生命周期限制。
内容的提问来源于stack exchange,提问作者delalma
相关产品推荐
相关产品推荐

