我一直在浏览关于结构化流的spark 2.3.1的文档,但是找不到有关状态存储在状态存储内部如何工作的详细信息。更具体地说,我想知道的是:(1)状态存储区是分布式的吗? (2)如果是,那么每个工人或每个核心如何?
在旧版本的spark中,似乎是每个工作人员使用的,但现在还不知道。我知道它得到了HDFS的支持,但是没有任何东西可以解释内存中存储的实际工作方式。
的确是分布式内存存储吗?我对重复数据删除特别感兴趣,如果数据来自一个大型数据集,那么这需要进行计划,因为所有“不同”数据集最终都将保存在内存中,直到该数据集处理结束。因此,需要根据状态存储的工作方式来计划工作者或主服务器的大小。
有人有一些信息,指针或建议如何处理吗?
谢谢, Maatari
答案 0 :(得分:0)
结构化流中只有一种状态存储实现,它由内存中的HashMap和HDFS支持。 内存中的HashMap用于数据存储,而HDFS用于故障角色。 HashMap在工作程序上占用执行程序内存,每个HashMap代表聚合分区的版本化键值数据(在聚合操作符如重复数据删除,groupByy等之后生成)
但这不能解释HDFSBackedStateStore实际如何工作。我没有在文档中看到它
您是正确的,没有可用的此类文档。 我必须了解代码(2.3.1),并写了一篇关于State Store在结构化流中如何内部工作的文章。您可能想看看:https://www.linkedin.com/pulse/state-management-spark-structured-streaming-chandan-prakash/