如何在2个Spark上下文之间共享Spark RDD?

sim*_*yun 8 apache-spark rdd

我有一个RMI集群.每个RMI服务器都有一个Spark上下文.有没有办法在不同的Spark上下文之间共享RDD?

zer*_*323 15

正如Daniel Darabos已经说过的那样,这是不可能的.Spark中的每个分布式对象都被绑定到已用于创建它的特定上下文(SparkContext如果是RDD,则SQLContextDataFrame数据集的情况下).如果要在应用程序之间共享对象,则必须使用共享上下文(例如spark-jobserver,参见LivyApache Zeppelin).由于RDDDataFrame只是一个小的本地对象,真的没什么可分享的.

共享数据是一个完全不同的问题.您可以使用专门的内存缓存(Apache Ignite)或分布在内存文件系统(如Alluxio - 前Tachyon)中,以最大限度地减少在应用程序之间切换时的延迟,但您无法真正避免它.


Dan*_*bos 3

不,一个 RDD 绑定到一个SparkContext. 总体思路是,您有一个 Spark 集群和一个告诉集群要做什么的驱动程序。该驱动程序将对SparkContextRDD 进行 并启动操作。

如果您只想将 RDD 从一个驱动程序移动到另一个驱动程序,解决方案是将其写入第一个驱动程序中的磁盘 (S3/HDFS/...),然后从另一个驱动程序中的磁盘加载它。