我正在使用 mapGroupsWithState 在流式数据集上,跨批维护状态。这些数据/状态存储在哪里?遗嘱执行人,司机还是其他人?
mapGroupsWithState
tyg4sfes1#
但我不确定这些数据/状态存储在哪里(执行人或司机)状态被持久化为 [checkpointLocation]/state 它应该在一个可靠的符合hdfs的分布式文件系统上,这样执行者(和任务)就可以在需要时访问它。这给了 [checkpointLocation]/state .可能有许多有状态操作符,每个操作符都有自己的 operatorId 用于存储特定于操作员的状态。这就是为什么每个有状态操作符可以有零个、一个或多个状态子目录。这给了 [checkpointLocation]/state/[operatorId] .在有状态运算符特定的状态目录中,甚至有更多子目录用于分区。提供以下特定于州的目录布局:
[checkpointLocation]/state
operatorId
[checkpointLocation]/state/[operatorId]
[checkpointLocation]/state/[operatorId]/[partitionId]
使用web ui查找 checkpointLocation , operatorId 以及分区的数量。有状态运算符的状态是从 [checkpointLocation]/state 使用 StateStoreRestoreExec 一元物理运算符(使用 explain 找到它)。 StateStoreRestoreExec 从状态存储中恢复(读取)子物理运算符给定的密钥的流状态。我的理解是,每个微批次都会重新创建状态。
checkpointLocation
StateStoreRestoreExec
explain
1条答案
按热度按时间tyg4sfes1#
但我不确定这些数据/状态存储在哪里(执行人或司机)
状态被持久化为
[checkpointLocation]/state
它应该在一个可靠的符合hdfs的分布式文件系统上,这样执行者(和任务)就可以在需要时访问它。这给了
[checkpointLocation]/state
.可能有许多有状态操作符,每个操作符都有自己的
operatorId
用于存储特定于操作员的状态。这就是为什么每个有状态操作符可以有零个、一个或多个状态子目录。这给了
[checkpointLocation]/state/[operatorId]
.在有状态运算符特定的状态目录中,甚至有更多子目录用于分区。
提供以下特定于州的目录布局:
使用web ui查找
checkpointLocation
,operatorId
以及分区的数量。有状态运算符的状态是从
[checkpointLocation]/state
使用StateStoreRestoreExec
一元物理运算符(使用explain
找到它)。StateStoreRestoreExec
从状态存储中恢复(读取)子物理运算符给定的密钥的流状态。我的理解是,每个微批次都会重新创建状态。