我有一个RMI集群,每个RMI服务器都有一个Spark上下文。是否有办法在不同的Spark上下文间共享RDD?
正如Daniel Darabos所说的那样,这是不可能的。在Spark中,每个分布式对象都绑定到特定的上下文中,该上下文已用于创建它(对于RDD来说是SparkContext
,对于DataFrame
数据集来说是SQLContext
)。如果您想在应用程序之间共享对象,则必须使用共享上下文(例如spark-jobserver
、Livy或Apache Zeppelin)。
由于RDD
或DataFrame
只是一个小的本地对象,因此真正要共享的内容很少。
分享数据是一个完全不同的问题。您可以使用专门的内存缓存(如Apache Ignite)或分布式内存文件系统(如Alluxio - 前身为Tachyon)来尽量减少在应用程序之间切换时的延迟,但您无法真正避免它。
SparkContext
相关联。一般的想法是你有一个 Spark 集群和一个驱动程序告诉集群该怎么做。这个驱动程序会有 SparkContext
并为 RDD 开始操作。