我在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。
答案 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
之外运行的应用程序,并且存在一些与此相关的难以捉摸的错误。