我有一个案例,我想每隔一小时从远程商店下载一些数据,并将其作为键值对存储在执行器/工作者的RDD中。我想缓存此RDD,以便在此执行程序/工作程序上运行的所有未来作业/任务/批处理可以使用缓存的RDD进行查找。这是否可以在Spark Streaming中使用?
相关代码或指向相关代码的指针将会有所帮助。
答案 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)
根据您的要求,我会提出以下建议:
注意:您的“在执行程序中缓存以跨应用程序使用”的概念不正确。执行程序涉及单个Spark应用程序,以及该应用程序中的任何RDD。
如果您真的需要投资在分布式节点上缓存数据,您可能需要考虑堆外内存数据库,例如Tachyon和Alluxio