为什么每个JVM只允许一个SparkContext?

use*_*017 1 jvm apache-spark rdd

采访中问了这个问题,每个JVM允许创建多少个sparkcontexts,为什么?我知道每个jvm仅允许一个sparkContext,但无法理解为什么?谁能帮我理解“每个jvm一个sparkcontext”背后的原因吗?

小智 5

答案很简单-尚未设计为可在多种情况下使用。引用雷诺辛

我不认为我们当前在同一个JVM进程中支持多个SparkContext对象。代码库中有许多使用共享缓存或线程局部变量或某些全局标识符的假设,这些假设使我们无法使用多个SparkContext。

在更广泛的意义-单一的应用程序(带main),单JVM -在Java世界标准方法(有一个每Java的JVM的应用?为什么每个应用程序一个JVM? )。应用服务器选择不同的方法,但这是例外,而不是规则。

从实用的角度来看,处理单个数据密集型应用程序已经很痛苦(调整GC,处理资源泄漏,通信开销)。从长远来看,不可能在单个JVM中运行Mutliple Spark应用程序。

最后,因为每个分布式数据结构都与其上下文紧密相连,所以使用多个上下文不会有太多用处。