我们如何在Spark Streaming中管理动态变化的全局缓存

时间:2017-06-16 12:53:01

标签: apache-spark spark-streaming

我想在Spark Streaming中创建一个全局缓存。此缓存将包含24小时的元素。由于缓存将由所有执行程序更新,我们如何维护缓存更新和动态刷新的全局缓存状态。

我是否可以创建一个缓存在MEMORY_AND_DISK中的全局RDD,并在每个Spark Streaming批处理中刷新。

2 个答案:

答案 0 :(得分:0)

对@maasg在评论中添加的内容进行了扩展,对于您的建议可能是集成或连接到Spark的第三方数据存储区的最佳解决方案。他提到了一些,Alluxio,Redis,EhCache。我以为我会把你链接到一个previous answer of mine,试图对其中的许多内容进行编目并提供一小部分上下文。

答案 1 :(得分:0)

Redis,EhCache等第三方缓存不会帮助我们在spark中管理变化的缓存,尤其是当变化的缓存是基于机器学习的基于主动学习的系统的缓存时。例如,k-均值分组将必须继续学习簇质心并在每次迭代后更新它们。如果您还要处理这种性质的缓存,那么可以考虑以下两个主要步骤:

  1. 广播数据以使每个执行者具有本地缓存​​的副本,并且
  2. 不断地完善此广播的缓存。

但是,由于广播变量是最终变量且无法更改,因此我采用了另一种方法来解决此问题,即不广播缓存的数据。它基本上包括学习每个分区的本地语料并将分区智能语料聚合为一个。

请参考我的博客part1-talks about keeping track of changing cache,其中我演示了如何聚合分区语料库。希望对您有帮助