为在Web应用程序中运行的Spark设置spark.driver.memory

时间:2018-04-27 20:25:20

标签: scala apache-spark memory

我在Scala Spray中有一个REST API,可以触发Spark作业,如下所示:

import { } from '@types/gapi';
import { } from '@types/gapi.auth2';

我试图找到为作业指定Spark驱动程序内存的方法。正如我所发现的,从应用程序代码中配置driver.memory并不会产生任何影响。

整个Web应用程序以及Spark都包装在一个胖罐中。 我通过运行

来运行它
path("vectorize") {
        get {
          parameter('apiKey.as[String]) { (apiKey) =>
            if (apiKey == API_KEY) {
              MoviesVectorizer.calculate() // Spark Job run in a Thread (returns Future)
              complete("Ok")
            } else {
              complete("Wrong API KEY")
            }

          }
        }
      }

因此,据我所知,spark-submit在这里不相关(或者是吗?)。因此,在运行应用程序时,我无法指定--driver-memory选项。

有没有办法在Web应用程序中为Spark设置驱动程序内存?

这是我当前的Spark配置:

java -jar app.jar

正如文档中所述,Spark UI Environment选项卡仅显示受配置影响的变量。我设置的所有东西都在那里 - 除了spark.executor.memory。

1 个答案:

答案 0 :(得分:1)

这是因为您使用local模式。在local模式下,没有真正的执行程序 - 所有Spark组件都在单个JVM中运行,具有单堆配置,因此执行程序特定的配置并不重要。

spark.executor选项仅在将应用程序提交到群集时适用。

此外,Spark每个JVM实例仅支持一个应用程序。这意味着所有核心Spark属性将仅在初始化SparkContext时应用,并且只要上下文(不是SparkSession)保持活动就会持久存在。由于SparkSession初始化SparkContext,因此没有额外的"核心"设置将在getOrCreate之后应用。

这意味着所有"核心"应使用config的{​​{1}}方法提供选项。

如果您正在寻找嵌入的替代方法,请按exemplary answer检查Best Practice to launch Spark Applications via Web Application?T. Gawęda

注意:官方Spark并不支持在SparkSession.builder之外运行的应用程序,并且存在一些与此相关的难以捉摸的错误。