【问题标题】:Spark Job Server: "The server was not able to produce a timely response to your request"Spark Job Server:“服务器无法及时响应您的请求”
【发布时间】:2015-01-16 15:04:45
【问题描述】:

我正在使用 Spark 作业服务器来运行 Spark 作业,它运行良好。但是当我尝试执行一项大工作(需要超过 40 秒)时,我收到了这个错误:

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

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

谢谢

【问题讨论】:

标签: java curl spray spark-jobserver


【解决方案1】:

同步作业提交可以达到几种不同的超时。你的来自 Spray-can 服务器。您可以通过conf 文件进行配置:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    如果该作业未完成,它将指示状态为 RUNNING。如果它完成了,它会给你一个 FINISHED 状态和结果。

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2020-04-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-13
        • 2010-12-09
        • 1970-01-01
        • 1970-01-01
        • 2014-07-02
        相关资源
        最近更新 更多