我有一个由7个任务组成的DAG。我已经执行了很多次,但最近它陷入了最后一个任务,这是一个非常简单的python操作符如下:
def send_email(warnings):
warnings = ast.literal_eval(warnings)
warnings_list = '\n'.join(warnings)
email_message =f"""Good morning, the past week there were some performance issues, which were the following ones:
\n {warnings_list}
Have a nice day!"""
send_email_smtp(to = 'email@email.com',
subject = 'Warning',
html_content = email_message)
send_email_task = PythonOperator(
task_id = 'send_email_task',
op_args = ["{{ task_instance.xcom_pull(task_ids='performance_comparison') }}"],
python_callable = send_email)
如果我输入任务实例的细节,我看到以下: 任务实例状态:任务处于“正在运行”状态,这不是有效的执行状态。必须清除该任务才能运行。 任务实例没有运行:任务已经运行,它开始于2019-12-17 18:00:20.747617+00:00。 我已经完成了任务,并多次被标记为失败/成功。我甚至稍微修改了DAG的代码来强制刷新,但它仍然不能工作。正如我几小时前说过的,它已经工作了好几次。 你知道发生了什么事吗? 预先非常感谢你 问题来源StackOverflow 地址:/questions/59379807/airflow-get-stacked-in-last-task-of-dag-after-several-executions
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据你的描述,Airflow中的DAG最后一个任务(send_email_task)卡在了“正在运行”状态,这通常意味着该任务可能因为某种原因未能正常完成或报告其状态给Airflow调度器。以下是一些可能的原因和解决步骤:
检查Task Logs:首先,查看send_email_task
的任务日志以获取更详细的错误信息。这些日志可能会揭示导致任务挂起的具体错误,比如网络问题、资源不足、依赖服务不可用等。
邮件发送问题:考虑到任务是发送电子邮件,可能存在SMTP服务器连接问题、认证失败、邮件队列满或其他与邮件发送相关的错误。确保SMTP服务器配置正确且可达,并检查是否有任何近期的更改或限制。
资源限制:如果任务需要较多CPU、内存资源而未得到满足,也可能导致执行缓慢或无法完成。检查运行Airflow worker的服务器资源使用情况。
超时设置:检查是否为PythonOperator设置了合理的超时时间(execution_timeout
参数),长时间运行无响应的任务可能需要调整此设置。
XCom数据处理:你提到使用task_instance.xcom_pull
来获取上游任务的数据。确保上游任务performance_comparison
正确地推送了数据,并且数据格式符合预期。有时候,XCom数据的不一致性可能导致下游任务处理逻辑出错。
Clear Task and Retry:既然你说已经尝试过标记任务为失败/成功,但也可以尝试从Airflow UI中清除这个任务实例(Clear),而不是仅仅重试。清除会将任务状态重置,以便DAG可以从头开始执行或者从故障点继续。
Worker和Scheduler状态:确认Airflow的worker和scheduler服务都处于健康运行状态,没有异常或重启的情况发生。
代码逻辑:虽然你提到代码之前工作正常,但还是建议检查send_email
函数内部逻辑,特别是ast.literal_eval(warnings)
这一行,确保传入的warnings
变量格式始终如一,不会引发异常。
版本兼容性:如果你最近更新了Airflow或相关依赖库,请检查是否有已知的兼容性问题引入。
通过上述步骤排查后,你应该能定位到问题所在并采取相应措施解决问题。如果问题依旧,考虑在StackOverflow上提供更详细的信息,包括日志片段和环境配置细节,以便获得更具体的帮助。