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

In Spark Streaming, can we store data (hashmap) in Executor memory

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

这在 Spark 流中可行吗?

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

之所以可行,是因为 Redis 和 Memcached 都是内存存储,因此不会有将数据溢出到磁盘的开销。

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