使用mapgroupswithstate为任意状态处理保存的状态在哪里?

vbkedwbf  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(329)

我正在使用 mapGroupsWithState 在流式数据集上,跨批维护状态。这些数据/状态存储在哪里?遗嘱执行人,司机还是其他人?

tyg4sfes

tyg4sfes1#

但我不确定这些数据/状态存储在哪里(执行人或司机)
状态被持久化为 [checkpointLocation]/state 它应该在一个可靠的符合hdfs的分布式文件系统上,这样执行者(和任务)就可以在需要时访问它。
这给了 [checkpointLocation]/state .
可能有许多有状态操作符,每个操作符都有自己的 operatorId 用于存储特定于操作员的状态。这就是为什么每个有状态操作符可以有零个、一个或多个状态子目录。
这给了 [checkpointLocation]/state/[operatorId] .
在有状态运算符特定的状态目录中,甚至有更多子目录用于分区。
提供以下特定于州的目录布局:

[checkpointLocation]/state/[operatorId]/[partitionId]

使用web ui查找 checkpointLocation , operatorId 以及分区的数量。
有状态运算符的状态是从 [checkpointLocation]/state 使用 StateStoreRestoreExec 一元物理运算符(使用 explain 找到它)。 StateStoreRestoreExec 从状态存储中恢复(读取)子物理运算符给定的密钥的流状态。我的理解是,每个微批次都会重新创建状态。

相关问题