我正在使用 mapGroupsWithState
在流数据集上以跨批次维护状态。这个数据/状态存储在哪里?执行人、司机或其他地方?
最佳答案
but I am not sure where this data/state is stored? (Executor or driver)
状态持续到
[checkpointLocation]/state
它应该位于可靠的符合 HDFS 标准的分布式文件系统上,以便执行程序(和任务)可以在需要时访问它。这给
[checkpointLocation]/state
.可能有许多有状态的操作符,每个操作符都有自己的
operatorId
用于存储特定于运算符(operator)的状态。这就是为什么每个有状态运算符可能有零个、一个或多个状态子目录的原因。这给
[checkpointLocation]/state/[operatorId]
.在有状态的特定于运算符(operator)的状态目录中还有更多子目录用于分区。
这给出了以下特定于状态的目录布局:
[checkpointLocation]/state/[operatorId]/[partitionId]
使用 Web UI 查找 checkpointLocation
, operatorId
和分区数。从
[checkpointLocation]/state
重新创建有状态运算符的状态使用 StateStoreRestoreExec
一元物理运算符(使用 explain
找到它)。 StateStoreRestoreExec
从状态存储中恢复(读取)由子物理操作符给出的 key 的流状态。我的理解是每个微批次都会重新创建状态。
关于apache-spark - 使用 mapGroupsWithState 为任意状态处理保存的状态在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62782561/