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

时间:2018-01-04 01:48:38

标签: apache-spark jvm rdd

这个问题在采访中被问到每个JVM允许创建多少个sparkcontexts,为什么? 我知道每个jvm只允许一个sparkContext,但是无法理解为什么? 有谁请帮助我理解背后的原因"每个jvm"一个sparkcontext?

1 个答案:

答案 0 :(得分:3)

答案很简单 - 它的设计并不适用于多个上下文。 Quoting Reynold Xin

  

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

从更广泛的意义上说 - 单个应用程序(带有main),单个JVM - 是Java世界中的标准方法(Is there one JVM per Java application?Why have one JVM per application?)。应用程序服务器选择不同的方法,但它是例外,而不是规则。

从实际角度来看 - 处理单个数据密集型应用程序非常痛苦(调整GC,处理泄漏的资源,通信开销)。从长远来看,在单个JVM中运行的多个Spark应用程序将无法进行调整和管理。

最后,由于每个分布式数据结构与其上下文紧密相关,因此不会有太多使用多个上下文。