MWAA升级至2.6后单一DAG出现Executor任务状态异常求助
MWAA 2.6升级后特定DAG任务状态异常问题
背景
- 已将MWAA环境从2.4版本升级至2.6版本
- 已适配版本破坏性变更:将
RedshiftSQLOperator替换为SQLExecuteQueryOperator,并将redshift_conn_id参数改为conn_id - 除上述变更外,DAG代码无其他改动,多数DAG运行正常
异常现象
- 特定DAG(
lazy_load_dag)频繁出现异常:Executor报告任务实例已完成(失败),但任务本身显示为排队状态,提示“是否任务被外部终止?” - 异常并非固定发生在同一任务,但集中在该DAG上
- 已尝试Stack Overflow相关解决方案,无效
提供的DAG配置
from datetime import datetime, timedelta from airflow import DAG default_args = {'start_date': datetime(2023, 3, 2), 'retries': 1, 'retry_delay': timedelta(seconds=20), 'email_on_failure': False} with DAG( dag_id="lazy_load_dag", start_date=datetime(2023, 3, 2), schedule_interval="30 22 * * *", tags=['lazy_load'], default_args=default_args, catchup = False, description='Some description', default_view='graph', #grid, graph, duration, gantt, landing_times on_failure_callback=None, on_success_callback=None, # max_active_runs = 1, # concurrency=10, # on_failure_callback=send_email ) as dag: # 任务定义部分省略
排查思路与解决方案
1. 检查MWAA环境资源配置
- 验证环境的worker节点数量、内存/CPU配额是否满足该DAG的任务并发需求:2.6版本对资源的需求可能有变化,若该DAG任务密集,worker资源不足会导致任务调度异常
- 查看环境的队列长度(如Celery队列),确认是否有任务堆积导致调度冲突
2. 核对SQLExecuteQueryOperator的使用细节
- 确认
SQLExecuteQueryOperator的参数配置是否完全符合2.6版本要求:比如是否遗漏了database参数(部分场景下需要显式指定),或者conn_id对应的连接配置是否正确(包括Redshift的端点、认证信息等) - 检查任务的超时设置:若任务执行时间过长触发超时,可能导致Executor误判任务状态,可在任务或default_args中添加
execution_timeout参数(如timedelta(minutes=30))
3. 查看Airflow核心日志
- 查看MWAA的Scheduler日志:搜索异常任务实例ID,检查是否有调度逻辑错误、任务拾取失败的日志信息
- 查看Worker日志:确认任务是否实际被执行过,是否有进程崩溃、资源耗尽的报错
- 查看Metadata数据库日志:检查是否有任务状态更新失败的数据库操作异常(如锁冲突、连接超时)
4. 调整DAG调度参数
- 尝试启用
max_active_runs = 1和concurrency=10(取消注释DAG配置中的这两行),限制该DAG的并发运行数和任务并发数,避免调度过载 - 检查该DAG的任务依赖关系:是否存在循环依赖或不合理的分支逻辑,导致调度器状态判断异常
5. 验证Airflow版本兼容性
- 确认MWAA 2.6版本对应的Airflow核心版本,检查
SQLExecuteQueryOperator是否有已知的bug(比如状态同步异常),可尝试临时回退部分任务到旧的Redshift操作方式(若可行)进行对比测试
内容的提问来源于stack exchange,提问作者AIViz
相关产品推荐
相关产品推荐

