Spark 2.4.0以集群模式提交 - 为什么需要REST提交服务器

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

我有一个独立的spark 2.4.0集群,我需要部署应用程序传递一些额外的java选项(驱动程序和执行程序)。要做到这一点,我使用spark.driver.extraJavaOptionsspark.executor.extraJavaOptions描述here。它在客户端模式下工作得非常好,但在集群模式下存在问题 - 变量不会传递给驱动程序(对于执行程序,它仍然可以正常)。我也面临着spark.driver.extraClassPath的类似问题,所以我猜问题更通用。

无论如何,我已经设法找到了解决方案:

  1. 我们需要使用REST提交服务器提交(通常在端口6066上运行,即spark:// localhost:6066)
  2. 为了实现上述目标,我们需要使用属性spark.master.rest.enabled显式启用REST提交(从2.4.0开始默认为false,在旧版本中为true - 请参阅PR

问题:

  1. 在使用集群模式使spark.driver.extraJavaOptions(和类似)选项按预期工作时,我无法在文档中找到我们实际需要通过REST部署的内容。 Official doc没有提到它。是否记录在其他任何地方,或者我遗漏了一些明显的东
  2. 我想在集群模式下提交是一个非常常见的用例。如果正确地执行此操作需要使用REST提交服务器(请纠正我,如果我错了)为什么默认情况下禁用它?
  3. 当我尝试以常规方式(7077端口)提交spark.master.rest.enabled设置为true时,我会在日志中获得以下信息: 警告:主endpointspark:// localhost:7077不是REST服务器。而是回到遗留提交网关。

从这一点来看,我会说,通常不通过REST提交是遗留问题,但是再次 - 它没有在任何地方记录,也为什么他们会默认禁用REST提交(参见我的第二个问题)?

  1. 当我尝试通过REST在客户端模式下部署时,它总是失败并出现错误StandaloneAppClient$ClientEndpoint:87 - Failed to connect to master localhost:6066这是否意味着我们在更改部署模式时总是必须切换端口?重点是什么,我们为什么不能有一种方式来部署我们的应用程序?
apache-spark spark-submit
2个回答
0
投票

我不是一个外籍人士,我还没有和2.4合作过,但我会分享我所知道的。

我不记得有类路径的问题,但它没有说太多。我主要使用其余的API和集群模式。只是为了确定..罐子以“local:/”开头吧?

其余的AFAIK又名“Spark hidden API”,它可以解释“无法在文档中找到”。

在我看来,其余的API没有以任何方式保护,这可能是它被隐藏的原因?但我很高兴听到至少它现在默认禁用,我认为它是在早期版本上默认启用的。

“重新回到遗留提交网关”会响铃,所以我认为它没问题(没有额外的类路径问题)

我不认为rest API支持客户端模式。怎么样? Jetty在主服务器上运行提交请求。我不知道它现在如何在调用主机上启动驱动程序进程?

至于类路径上丢失的罐子,你试过“spark.jars”吗?

如果全部失败...试试超级罐:-)


0
投票

看起来这是SPARK Jira报道的错误

PR with the fix被提出,希望很快就能合并

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