apache-spark - 使用 mapGroupsWithState 为任意状态处理保存的状态在哪里?

标签 apache-spark spark-structured-streaming

我正在使用 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/

相关文章:

scala - Spark 结构化流 - 将静态数据集与流数据集连接起来

scala - 如何将两列合并到一个新的 DataFrame 中?

apache-spark - 如何将from_json与架构作为字符串(即JSON编码的架构)一起使用?

scala - 如何将收到记录的年、月、日写入S3?

python - Pyspark 从结构化流中的映射数组中提取值

java - 在 Spark 结构化流中使用 Kafka 接收器时是否必须设置检查点?

apache-spark - 如何在 Spark scala 的窗口 PartitionBy 中应用多个列

apache-spark - Tachyon 默认情况下是否由 Apache Spark 中的 RDD 实现?

apache-spark - 不允许操作 : STORED BY hive on spark sql

python - pyspark:从现有列创建 MapType 列