【发布时间】:2019-03-22 16:52:37
【问题描述】:
我有一个 独立 spark 2.4.0 集群,我需要将应用程序部署到该集群,并传递一些额外的 java 选项(驱动程序和执行程序)。
为此,我使用spark.driver.extraJavaOptions 和spark.executor.extraJavaOptions 描述here。
它在客户端模式下工作得很好,但是在集群模式下存在问题 - 变量没有传递给驱动程序(对于执行程序来说它仍然很好)。
我也面临spark.driver.extraClassPath 的类似问题,所以我想问题更普遍。
无论如何,我已经设法找到了解决方案:
- 我们需要使用 REST 提交服务器进行提交(通常运行在 6066 端口,即 spark://localhost:6066)
- 为了实现上述目标,我们需要使用属性
spark.master.rest.enabled显式启用 REST 提交(从 2.4.0 开始,默认情况下为 false,在旧版本中为 true - 请参阅 PR)
问题:
在使用集群模式以使
spark.driver.extraJavaOptions(和类似)选项按预期工作时,我无法在文档中找到我们实际上需要通过 REST 部署。 Official doc 没有提及。它是否记录在其他任何地方,还是我遗漏了一些明显的东西?我想在集群模式下提交是一个很常见的用例。如果正确执行此操作需要使用 REST 提交服务器(如果我错了请纠正我)为什么默认禁用它?
-
当我尝试以常规方式(7077 端口)提交并将
spark.master.rest.enabled设置为 true 时,我会在日志中获得以下信息:警告:主端点spark://localhost:7077 不是 REST 服务器。改用legacy提交网关。
据此判断,我会说通常不通过 REST 提交是遗留问题,但同样 - 它没有在任何地方记录,为什么他们会默认禁用 REST 提交(请参阅我的第二个问题)?
- 当我尝试通过 REST 在客户端模式下部署时,它总是失败并出现错误
StandaloneAppClient$ClientEndpoint:87 - Failed to connect to master localhost:6066这是否意味着我们在更改部署模式时总是必须切换端口?有什么意义,为什么我们不能有一种方法来部署我们的应用?
【问题讨论】: