【发布时间】:2018-01-04 01:48:38
【问题描述】:
这个问题在采访中被问到,每个 JVM 允许创建多少个 sparkcontext,为什么? 我知道每个 jvm 只允许一个 sparkContext 但不明白为什么? 有人能帮我理解“每个 jvm 一个 sparkcontext”背后的原因吗?
【问题讨论】:
标签: apache-spark jvm rdd
这个问题在采访中被问到,每个 JVM 允许创建多少个 sparkcontext,为什么? 我知道每个 jvm 只允许一个 sparkContext 但不明白为什么? 有人能帮我理解“每个 jvm 一个 sparkcontext”背后的原因吗?
【问题讨论】:
标签: apache-spark jvm rdd
答案很简单——它的设计初衷并非适用于多种环境。 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 应用程序将无法调优和管理。
最后,拥有多个上下文不会有太多用处,因为每个分布式数据结构都与其上下文紧密相连。
【讨论】: