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

标签 apache-spark jvm rdd

这个问题在面试中被问到每个 JVM 允许创建多少个 sparkcontext,为什么? 我知道每个 jvm 只允许一个 sparkContext 但不明白为什么? 谁能帮我理解“每个 jvm 一个 sparkcontext”背后的原因?

最佳答案

答案很简单——它并不是为处理多个上下文而设计的。 Quoting Reynold Xin :

I don't think we currently support multiple SparkContext objects in the same JVM process. There are numerous assumptions in the code base that uses a a shared cache or thread local variables or some global identifiers which prevent us from using multiple SparkContext's.

在更广泛的意义上 - 单个应用程序(使用 main),单个 JVM - 是 Java 世界中的标准方法(Is there one JVM per Java application?Why have one JVM per application?)。应用服务器选择不同的方法,但这是异常(exception),而不是规则。

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

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

关于apache-spark - 为什么每个 JVM 只允许一个 SparkContext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48087617/

相关文章:

apache-spark - 列特征必须是 org.apache.spark.ml.linalg.VectorUDT 类型

java - Jpcap 破坏 JVM

返回多个 RDD 的 Java Spark 映射步骤

python - 什么样的对象可以作为 Spark RDD 中的元素?

scala - 错误 ContextCleaner : Error in cleaning thread

python - Pyspark 默认是否缓存数据帧?

java - 从 JVM fatal error 日志中猜测方法行号

java - 将证书导入 cacerts 在 Mac OS Mojave 上出现文件 I/O 异常

java - 如何对Java Spark RDD执行标准差和均值运算?

apache-spark - 为什么默认的 persist() 会将数据作为非序列化对象存储在 JVM 堆中?