在Spark Streaming中,我们可以将数据(hashmap)存储在Executor内存中

时间:2016-08-22 15:08:25

标签: caching apache-spark hashmap streaming executor

我想在Spark Executors内存(长期缓存)中维护一个缓存(HashMap),以便在执行程序上运行的所有任务(在不同时间)可以在那里进行查找,并且还能够更新缓存。

这可以在Spark流媒体中使用吗?

1 个答案:

答案 0 :(得分:3)

我不确定是否有办法在执行程序上永久存储自定义数据结构。我的建议是使用一些外部缓存系统(在某些情况下像Redis,Memcached甚至ZooKeeper)。您可以使用foreachPartitionmapPartitions等方法进一步连接到该系统,同时处理RDD / DataFrame以减少每个分区1个连接的连接数。

为什么这会起作用的原因是Redis和Memcached都是内存存储器,所以不会有数据溢出到磁盘的开销。

在执行程序之间分配一些状态的另外两种方法是累加器和广播变量。对于累加器,所有执行程序都可以写入,但只能由驱动程序执行读取。对于Broadcast变量,您只在驱动程序上编写一次,然后将其作为只读数据结构分发给执行程序。这两种情况都不适合你,因此所描述的解决方案是我在这里可以看到的唯一可行方式。