Apache Airflow 2.6.1任务B持续处于running状态求助
我使用Apache Airflow 2.6.1版本,通过终端执行airflow standalone以SequentialExecutor模式本地运行一个简单DAG。第一个任务A仅包含打印语句,运行正常,但第二个任务B一直处于'running'状态(通过UI查看)。终端除偶尔出现INFO - 0 triggers currently running外无其他输出。
当前DAG仅使用PythonOperator,任务B调用geo函数生成GeoDataFrame,以下是完整DAG代码:
from datetime import timedelta from airflow import DAG from airflow.operators.python_operator import PythonOperator import osmnx default_args = { 'owner': 'airflow', 'retries': 1, 'retry_delay': timedelta(minutes=5), } dag = DAG( dag_id = "demo", default_args=default_args, schedule_interval='@once', dagrun_timeout=timedelta(minutes=15), description='demo', start_date = airflow.utils.dates.days_ago(1), ) def hello(): print('hello') def geo(): print('opened') place = 'California, USA' gdf = osmnx.geocode_to_gdf(place) print('made a gdf') task_a = PythonOperator( task_id='A', python_callable = hello, dag=dag ) task_b = PythonOperator( task_id='B', python_callable = geo, dag=dag ) task_c = PythonOperator( task_id='C', python_callable = hello, dag=dag ) task_a >> task_b >> task_c

排查建议
查看任务B的详细日志:进入Airflow UI中任务B的实例页面,点击"Logs"查看完整执行日志,确认函数是否卡在某一步、是否有报错信息。当前代码仅用
print输出,在Airflow中建议改用logging模块输出日志,更易追踪执行状态:import logging def geo(): logging.info('geo函数开始执行') place = 'California, USA' logging.info(f'正在获取{place}的地理数据') gdf = osmnx.geocode_to_gdf(place) logging.info(f'地理数据生成完成,数据行数:{len(gdf)}')单独测试geo函数:在Airflow环境外直接运行
geo函数,确认该函数是否能正常完成、耗时多久。比如在终端执行以下代码:import osmnx place = 'California, USA' gdf = osmnx.geocode_to_gdf(place) print(gdf)若函数本身执行缓慢或报错,说明问题出在osmnx调用而非Airflow配置。
检查网络与依赖:
osmnx.geocode_to_gdf依赖OpenStreetMap的服务,若网络环境较差,可能导致请求超时或卡住。同时确认osmnx版本与当前Python环境兼容,无依赖冲突。调整超时配置:当前DAG设置了
dagrun_timeout=timedelta(minutes=15),若任务B实际执行时间超过15分钟,可能导致异常,但SequentialExecutor下会有日志提示。可先确认函数单独执行的耗时,再调整该参数。
内容的提问来源于stack exchange,提问作者Ellio

