我想在Spark Executors内存(长寿命缓存)中维护一个缓存(HashMap),以便在执行器上运行的所有任务(在不同时间)都可以在那里进行查找,并且还可以更新缓存。
Spark流中有可能吗?
我不确定是否有一种方法可以在执行程序上永久存储自定义数据结构。我的建议是使用某些外部缓存系统(在某些情况下,例如Redis,Memcached甚至ZooKeeper)。您可以使用类似方法foreachPartition
或mapPartitions
在处理RDD / DataFrame的过程中进一步连接到该系统,以将连接数减少到每个分区1个连接。
之所以可行,是因为Redis和Memcached都是内存中的存储,因此不会有将数据溢出到磁盘的开销。
在执行程序之间分配某些状态的其他两种方法是Accumulators和Broadcast变量。对于累加器,所有执行者都可以向其中写入,但只能由驱动程序执行读取。对于广播变量,您只能在驱动程序上写入一次,然后将其作为只读数据结构分发给执行者。两种情况都不适合您,因此所描述的解决方案是我在这里看到的唯一可能方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句