我们可以在执行程序的批处理中使用缓存的RDD

时间:2016-09-20 04:53:57

标签: caching apache-spark streaming rdd executor

我有一个案例,我想每隔一小时从远程商店下载一些数据,并将其作为键值对存储在执行器/工作者的RDD中。我想缓存此RDD,以便在此执行程序/工作程序上运行的所有未来作业/任务/批处理可以使用缓存的RDD进行查找。这是否可以在Spark Streaming中使用?

相关代码或指向相关代码的指针将会有所帮助。

3 个答案:

答案 0 :(得分:3)

Alluxio是一个以内存为中心的分布式存储系统。 Alluxio可用于在内存中缓存Spark RDD,以供多个和未来的Spark应用程序和作业访问。

Spark can store RDDs in Alluxio memory,未来的Spark作业可以从Alluxio内存中读取它们。该博客文章详细介绍了它的工作原理。以下是how to setup and configure Alluxio with Spark的信息。

答案 1 :(得分:0)

如果您只需要一个巨大的分布式map,并且您想使用Spark,请编写一个独立的作业,每小时下载一次数据,并缓存由此获得的RDD(您可以使用旧RDD)。让我们称这个工作为DataRefresher

然后,您可以公开一个REST api(如果您在Scala,考虑使用Scalatra)包装DataRefresher,并在给定密钥的情况下返回值。像http://localhost:9191/lookup/key这样的东西,可以被其他工作用来进行相对快速的查找。

答案 2 :(得分:0)

根据您的要求,我会提出以下建议:

  1. 每1小时运行一次Spark应用程序作业,这将从外部数据源获取数据并附加到配置单元表。
  2. 使用Spark thrift服务器访问数据
  3. 注意:您的“在执行程序中缓存以跨应用程序使用”的概念不正确。执行程序涉及单个Spark应用程序,以及该应用程序中的任何RDD。

    如果您真的需要投资在分布式节点上缓存数据,您可能需要考虑堆外内存数据库,例如Tachyon和Alluxio