我正在尝试了解检查点的内容和相应的恢复;理解检查点的过程显然是自然的方式,所以我浏览了以下列表:
我仍然在努力理解检查点末尾的磁盘上发生了什么。
我对 Spark 检查点的理解:
如果你有很长的 DAG 并且你的 spark 集群失败了,检查点通过将中间状态持久化到 HDFS 来帮助。因此,在检查点的帮助下,可以将 50 个转换的 DAG 减少到 4-5 个转换。它虽然打破了 DAG。
流式传输中的检查点
我的 Spark Streaming 作业有一个 5 秒的微批处理。据我了解,JobScheduler每 5 秒提交一个新作业,它调用JobGenerator从DStreamGraph为新的微批次生成RDD DAG ,同时接收器继续为下一个新的微批次收集数据循环。据我了解,如果我启用检查点,它将定期保持检查点“当前状态”。
问题:
这个“状态”是什么?这是仅针对当前微批次的基本 RDD 和 DAG 的运算符/转换状态的组合吗?所以我有以下内容:
ubatch 0 at T=0 ----> SUCCESS ubatch 1 at T=5 ----> SUCCESS ubatch 2 at T=10 ---> SUCCESS --------------------> Checkpointing kicks in now at T=12 ubatch 3 at T=15 ---> SUCCESS ubatch 4 at T=20 --------------------> Spark Cluster DOWN at T=23 => ubatch 4 FAILS!!! ... --------------------> Spark Cluster is restarted at *T=100*
由于T=12的检查点,磁盘上的具体内容是什么?它会只存储ubatch 2的 DAG 运算符的当前状态吗?
一个。如果是,则在T=100恢复期间,最后一个可用检查点位于T=12。已成功处理的T=15的ubatch 3会发生什么情况。应用程序是否在此处重新处理ubatch 3并处理幂等性?如果是,我们是否会转到流媒体源(例如 Kafka)并倒回偏移量以便能够重播从ubatch 3开始的内容?
湾。如果不是,那么在 T=12 时检查点目录中究竟有什么内容?