如何在两个应用程序之间共享Spark RDD中的数据

时间:2016-01-19 14:01:58

标签: apache-spark rdd sharing

在两个火花作业之间共享火花RDD数据的最佳方法是什么。

我有一个案例,即作业1:Spark Sliding window Streaming App,将定期消耗数据并创建RDD。这个我们不想坚持存储。

作业2:查询将访问作业1中创建的相同RDD并生成报告的作业。

我看到他们建议使用SPARK作业服务器的几个查询,但因为它是一个开源不确定它是否是一个可能的解决方案,但任何指针都会有很大的帮助。

thankyou!

4 个答案:

答案 0 :(得分:3)

简短的回答是,您无法在工作之间共享RDD。您可以共享数据的唯一方法是将该数据写入HDFS,然后将其拉入另一个作业。如果速度是一个问题,并且您希望保持恒定的数据流,则可以使用HBase,这将允许从第二个作业进行非常快速的访问和处理。

为了更好的想法,你应该看看这里:

Serializing RDD

答案 1 :(得分:1)

您可以使用Apache Ignite在不同的应用程序之间共享RDD。 Apache ignite提供了一个抽象来共享RDD,应用程序可以通过它来访问与不同应用程序相对应的RDD。此外,Ignite支持SQL索引,而原生Spark并不支持。 有关详细信息,请参阅https://ignite.apache.org/features/igniterdd.html

答案 2 :(得分:0)

根据官方文件描述:

  

请注意,目前没有一种模式可以跨应用程序提供内存共享。如果您希望以这种方式共享数据,我们建议运行单个服务器应用程序,通过查询相同的RDD来提供多个请求。   http://spark.apache.org/docs/latest/job-scheduling.html

答案 3 :(得分:0)

您可以保存到临时视图。该表将在其他会话中可用,直到创建该表的会话关闭