使用mapGroupsWithState 进行任意状态处理时状态保存在哪里?

con*_*fun 5 apache-spark spark-structured-streaming

我正在mapGroupsWithState流数据集上使用来维护跨批次的状态。该数据/状态存储在哪里?执行者、司机还是其他地方?

Jac*_*ski 3

但我不确定这个数据/状态存储在哪里?(执行者或驱动者)

状态应该保存[checkpointLocation]/state在可靠的、符合 HDFS 标准的分布式文件系统上,以便执行器(和任务)可以在需要时访问它。

这给出了[checkpointLocation]/state.

可能有许多有状态运算符,每个运算符都有自己的operatorId用于存储特定于运算符的状态。这就是为什么每个有状态运算符可能有零个、一个或多个状态子目录。

这给出了[checkpointLocation]/state/[operatorId].

分区的有状态操作符特定状态目录中还有更多子目录。

这给出了以下特定于状态的目录布局:

[checkpointLocation]/state/[operatorId]/[partitionId]
Run Code Online (Sandbox Code Playgroud)

使用 Web UI 找出checkpointLocationoperatorId分区数。

有状态运算符的状态是通过[checkpointLocation]/state使用StateStoreRestoreExec一元物理运算符重新创建的(使用explain来查找它)。StateStoreRestoreExec从子物理操作符给出的键的状态存储中恢复(读取)流状态。我的理解是,每个微批次都会重新创建状态。