Apache spark 如何在2个Spark上下文之间共享Spark RDD?
我有一个RMI集群。每个RMI服务器都有一个Spark上下文。Apache spark 如何在2个Spark上下文之间共享Spark RDD?,apache-spark,rdd,Apache Spark,Rdd,我有一个RMI集群。每个RMI服务器都有一个Spark上下文。 有没有办法在不同的Spark上下文之间共享RDD?没有,RDD绑定到单个SparkContext。一般的想法是,你有一个Spark集群和一个驱动程序,告诉集群该做什么。此驱动程序将在RDD上执行SparkContext和启动操作 如果您只想将RDD从一个驱动程序移动到另一个驱动程序,解决方案是将其写入第一个驱动程序中的磁盘(S3/HDFS/…),然后从另一个驱动程序中的磁盘加载。正如Daniel Darabos所述,这是不可能的。S
有没有办法在不同的Spark上下文之间共享RDD?没有,RDD绑定到单个
SparkContext
。一般的想法是,你有一个Spark集群和一个驱动程序,告诉集群该做什么。此驱动程序将在RDD上执行SparkContext
和启动操作
如果您只想将RDD从一个驱动程序移动到另一个驱动程序,解决方案是将其写入第一个驱动程序中的磁盘(S3/HDFS/…),然后从另一个驱动程序中的磁盘加载。正如Daniel Darabos所述,这是不可能的。Spark中的每个分布式对象都被绑定到用于创建它的特定上下文(
SparkContext
对于RDD,SQLContext
对于DataFrame
dataset)。如果希望在应用程序之间共享对象,则必须使用共享上下文(例如,请参见或)。由于RDD
或DataFrame
只是一个小的本地对象,因此实际上没有太多可共享的内容
共享数据是一个完全不同的问题。您可以使用专门的内存缓存()或分布式内存文件系统(如前Tachyon)来最小化在应用程序之间切换时的延迟,但您无法真正避免延迟。据我所知,RDD不是数据,而是通过转换/过滤从原始数据创建数据的方法 另一个想法是共享最终数据。因此,您将在数据存储中存储RDD,例如: -HDFS(拼花锉刀等) -弹性搜索 -ApacheIgnite(内存中) 我想你会喜欢ApacheIgnite: ApacheIgnite提供了Spark RDD抽象的实现 允许跨多个Spark轻松共享内存中的状态 同一应用程序内或不同应用程序之间的作业 应用程序 IgniteRDD实现为分布式Ignite缓存上的视图, 可以在Spark作业执行过程中部署, 或者在Spark worker上,或者在它自己的集群中 (我让您挖掘他们的文档,以找到您要查找的内容。)