Spark Streaming揭秘 Day33 checkpoint的使用

时间:2023-03-08 16:33:41

Spark Streaming揭秘 Day33

checkpoint的使用

今天谈下sparkstreaming中,另外一个至关重要的内容Checkpoint。
首先,我们会看下checkpoint的使用。另外,会看下在应用程序重新启动时,是如何处理checkpoint的。

Checkpoint保存什么

checkpoint作为容错的设计,基本思路是把当前运行的状态,保存在容错的存储系统中(一般是hdfs)。对于容错的处理,肯定是围绕作业紧密相关的,保存内容包括元数据和数据两部分。

从元数据角度讲,SparkStreaming中会有哪些内容需要保存呢,主要有三类:

  1. 程序的配置
  2. 应用程序的业务逻辑,保存在DStreamGraph里。
  3. 还有哪些没有处理的数据,即没有完成的batch。

从数据角度讲下,Checkpoint是对于状态(state)操作生效。
首先,一般情况下在接收数据并保存时,是使用WAL来容错,这个昨天讨论过,并不放在checkpoint里。
对状态(state)的DStream操作(updateStateByKey),操作会跨多个batch duration,后面数据对前面的有依赖,随着时间的推移,依赖链条会越来越长,这个时候需要使用checkpoint,把这个长链条持久化,成为短链条。

在官方例子RecoverableNetworkCount中,我们看到可以用如下方法创建一个可恢复的streamingContext。
Spark Streaming揭秘 Day33 checkpoint的使用

那关键就是getOrCreate方法

Spark Streaming揭秘 Day33 checkpoint的使用

里面提供了两种创建方式,第一次是创建新的streaming context,否则会从checkpoint数据中创建出上下文。第三个输入参数是Hadoop的配置,一般来说checkpoint存放在hdfs中。ignoreReadError,可以控制是否抛出异常。

让我们进入checkpoint的read方法。这里面是循环checkpoint目录中的文件,读取并反序列化,之后返回。
Spark Streaming揭秘 Day33 checkpoint的使用

我们看下反序列化方法,生成一个Checkpoint类型。
Spark Streaming揭秘 Day33 checkpoint的使用

Checkpoint里面包含了所有我们进行保存的内容。
Spark Streaming揭秘 Day33 checkpoint的使用

使用checkpoint恢复

下面我们来看下使用checkpoint构建环境的过程。

首先,调用sparkContext.getOrCreate 来构建sparkContext。
Spark Streaming揭秘 Day33 checkpoint的使用

之后是恢复DStreamGraph。
Spark Streaming揭秘 Day33 checkpoint的使用

DStreamGraph的恢复过程中,关键是恢复所有的outputStream。
Spark Streaming揭秘 Day33 checkpoint的使用

在恢复的过程中,默认是根据checkpoint文件重建RDD。
Spark Streaming揭秘 Day33 checkpoint的使用

checkpoint的数据是保存在ReliableCheckpointRDD中,我们看下compute方法。可以看到,就是从checkpoint文件读取数据。
Spark Streaming揭秘 Day33 checkpoint的使用

最后,还有恢复checkpointDuration。
Spark Streaming揭秘 Day33 checkpoint的使用

Checkpoint的生成

生成是在JobGenerator中触发。

在每次生成Job后,都会触发checkpoint的写入事件。

Spark Streaming揭秘 Day33 checkpoint的使用

doCheckpoint会写入一个Checkpoint对象,其核心就是采用序列化技术把对象写入磁盘。
Spark Streaming揭秘 Day33 checkpoint的使用

今天对checkpoint的介绍就到这里,对于整个机制来看,还是有些漏洞,如果目录数据存在,但是代码变化了,有可能出现不能读取checkpoint里的内容,希望后续版本能改进。

欲知后事如何,且听下回分解!

DT大数据每天晚上20:00YY频道现场授课频道68917580