在采访中询问了这个问题,每个JVM允许创建多少个sparkcontexts,为什么?我知道每个jvm只允许一个sparkContext,但是无法理解为什么?有谁请帮助我理解“每个jvm一个sparkcontext”背后的原因?
答案很简单 - 它没有设计用于多个上下文。 Quoting Reynold Xin:
我认为我们目前不支持同一JVM进程中的多个SparkContext对象。代码库中有许多假设,它们使用共享缓存或线程局部变量或一些全局标识符来阻止我们使用多个SparkContext。
从更广泛的意义上说 - 单个应用程序(使用main
),单个JVM - 是Java世界中的标准方法(Is there one JVM per Java application?,Why have one JVM per application?)。应用程序服务器选择不同的方法,但它是例外,而不是规则。
从实际的角度来看 - 处理单个数据密集型应用程序是非常痛苦的(调整GC,处理泄漏的资源,通信开销)。从长远来看,在单个JVM中运行的Mutliple Spark应用程序将无法进行调整和管理。
最后,由于每个分布式数据结构与其上下文紧密相关,因此不会有太多使用多个上下文。