执行 Databricks SQL 查询时,AWS ECS 上的 Spring Boot API 失败并出现“管道损坏”

问题描述 投票:0回答:1

我正在尝试从 Spring Boot API 对 Databricks 执行 SELECT 查询。我已经使用 Databricks 作为数据源初始化了 javax.sql.DataSource 并使用了executeQuery() 方法来运行查询。

该服务在我当地的环境中运行良好。但是,当我将其部署到AWS ECS并使用Postman调用API时,遇到以下错误:

org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream failed to write: java.io.IOException: Broken pipe
at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleHttpServletResponse.handleIOException(StandardServletAsyncWebRequest.java:343)
at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleServletOutputStream.write(StandardServletAsyncWebRequest.java:401) at org.springframework.util.StreamUtils$NonClosingOutputStream.write(StreamUtils.java:261) 
at com.fasterxml.jackson.core.json.UTF8JsonGenerator._flushBuffer(UTF8JsonGenerator.java:2210)
at com.fasterxml.jackson.core.json.UTF8JsonGenerator.writeFieldName(UTF8JsonGenerator.java:247) ......
Caused by: org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:341)
at org.apache.catalina.connector.OutputBuffer.flushByteBuffer(OutputBuffer.java:776)
at org.apache.catalina.connector.OutputBuffer.append(OutputBuffer.java:673)
at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:376)
at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:354)
at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:103)

此错误不会在本地发生,只有当服务部署在 AWS ECS 上时才会发生。

到目前为止我尝试过的:

  • 验证查询在我的本地环境中完美运行。
  • 增加 ECS 容器内存和 CPU。
  • 检查 API 网关超时(如果 相关)和 ECS 负载均衡器空闲超时。我的没有发现问题
  • 与连接超时或负载均衡器相关的 CloudWatch 日志 断开连接。
spring-boot databricks broken-pipe
1个回答
0
投票

请仔细阅读提到的... 1.增加客户端(Postman)和 Spring Boot 应用程序的超时。 2.检查ECS和Databricks配置,确保没有网络超时或限制。 3.检查异步请求设置并增加长时间运行查询的超时。 4.确保优化查询以减少执行时间。

© www.soinside.com 2019 - 2024. All rights reserved.