Apache spark 使用mapGroupsWithState为任意状态处理保存的状态在哪里?
我在流式数据集上使用Apache spark 使用mapGroupsWithState为任意状态处理保存的状态在哪里?,apache-spark,spark-structured-streaming,Apache Spark,Spark Structured Streaming,我在流式数据集上使用mapGroupsWithState来跨批维护状态。此数据/状态存储在哪里?遗嘱执行人,司机还是其他什么地方 但我不确定该数据/状态存储在哪里?(执行人或司机) 状态被持久化到[checkpointLocation]/State,该状态应位于可靠的HDFS兼容分布式文件系统上,以便执行者(和任务)可以在需要时访问它 这将给出[checkpointLocation]/state 可能有许多有状态运算符,每个运算符都有自己的运算符ID,用于存储特定于运算符的状态。这就是为什么每个
mapGroupsWithState
来跨批维护状态。此数据/状态存储在哪里?遗嘱执行人,司机还是其他什么地方
但我不确定该数据/状态存储在哪里?(执行人或司机)
状态被持久化到[checkpointLocation]/State
,该状态应位于可靠的HDFS兼容分布式文件系统上,以便执行者(和任务)可以在需要时访问它
这将给出[checkpointLocation]/state
可能有许多有状态运算符,每个运算符都有自己的运算符ID
,用于存储特定于运算符的状态。这就是为什么每个有状态运算符可能都有零个、一个或多个状态子目录
这将给出[checkpointLocation]/state/[operatorId]
在有状态运算符特定的状态目录中,分区的子目录甚至更多
这将提供以下特定于州的目录布局:
[checkpointLocation]/state/[operatorId]/[partitionId]
使用web UI查找检查点位置
、运算符ID
和分区数
有状态运算符的状态是使用一元物理运算符从
[checkpointLocation]/state
重新创建的(使用explain
查找)StateStoreRestoreExec
从状态存储中恢复(读取)子物理操作员提供的密钥的流状态。我的理解是,每个微批次都会重新创建状态。感谢@JacekLaskowski提供详细的答案。使用您提供的指针,我将尝试找出状态是从检查点位置文件还是从内存中的数据结构创建的。由于在每个微批次中从hdfs/s3创建状态并不理想,并且会增加批处理时间hi@Jacek,这是否意味着该状态根本不保存在内存中?它直接保存到检查点位置!它在被使用和计算后(因此在内存中)位于检查点位置。创建了以下问题:我认为它有某种关联。但问题是它存储在内存中的什么位置