Spark 作业服务器:"The server was not able to produce a timely response to your request"



我正在使用Spark Job Server来运行Spark作业,它运行良好。但是当我尝试执行一项大型作业(需要超过 40 秒)时,我收到此错误:

The server was not able to produce a timely response to your request.

是否需要一些配置才能等待服务器应答?我该怎么办?

谢谢

同步作业提交可能会遇到几种不同的超时。您的来自喷雾罐服务器。您可以通过conf文件对其进行配置:

spray.can.server {
      idle-timeout = <set desired timeout>
      request-timeout = <set desired timeout>
}

您可以将这两个值都设置为 infinite 以完全禁用这些超时。

通常,我观察到至少 3 种常见的不同超时,它们可以在作业完成之前返回您的请求:

  1. 基于 Akka 的询问超时。如果同步作业未在 X 秒之前完成,将返回状态为"错误"的 JSON 响应。SJS 中的默认值为 10 秒,但您可以通过将参数传递给POST /jobs请求来覆盖它timeout=Y
  2. 喷雾罐服务器超时:idle-timeoutrequest-timeout。将返回默认喷雾响应,使其更难捕获。 它们分别默认为 60 秒和 40 秒。
  3. 另一个超时可能来自您的客户端 REST 库...他们中的一些人配置他们的默认值以禁用此层上的任何超时,其中一些可能会考虑服务器的超时并据此配置自己的行为......例如,一旦您禁用上面的超时 #2,C++ REST SDK 库就会在 WinHTTP 超时 30 秒内启动,如果 #2 就位,它将等待 40 秒......

在 Rest 调用中,将 (sync=false) 放在 URL 的末尾。类似于 http://server:8090/jobs?classPath=....&sync=false在最后。它将在服务器上启动作业并为您提供 JobId。

然后,可以使用 JobId 来获取结果:

例如:http://server:8090/jobs/b3b46a27-f711-469w-be09-4942006896b5

如果该作业未完成,它将指示状态为"正在运行"。如果已完成,它将为您提供"已完成"状态和结果。

我遇到了同样的问题。错误消息似乎是通用的。当我检查日志时,我看到:

Oops, there's an AbstractMethodError... maybe you compiled your code with an older version of SJS? here's the exception:

当我将版本更改为 0.7 时,它起作用了。所以这个错误有时可能意味着存在错误。您必须检查日志。

最新更新