zoukankan      html  css  js  c++  java
  • Spark Streaming揭秘 Day33 checkpoint的使用

    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。
    Snip20160712_68

    那关键就是getOrCreate方法

    Snip20160712_72

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

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

    我们看下反序列化方法,生成一个Checkpoint类型。
    Snip20160712_73

    Checkpoint里面包含了所有我们进行保存的内容。
    Snip20160712_74

    使用checkpoint恢复

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

    首先,调用sparkContext.getOrCreate 来构建sparkContext。
    Snip20160712_75

    之后是恢复DStreamGraph。
    Snip20160712_76

    DStreamGraph的恢复过程中,关键是恢复所有的outputStream。
    Snip20160712_77

    在恢复的过程中,默认是根据checkpoint文件重建RDD。
    Snip20160712_79

    checkpoint的数据是保存在ReliableCheckpointRDD中,我们看下compute方法。可以看到,就是从checkpoint文件读取数据。
    Snip20160712_80

    最后,还有恢复checkpointDuration。
    Snip20160712_81

    Checkpoint的生成

    生成是在JobGenerator中触发。

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

    Snip20160712_83

    doCheckpoint会写入一个Checkpoint对象,其核心就是采用序列化技术把对象写入磁盘。
    Snip20160712_86

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

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

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

  • 相关阅读:
    洛谷 P6851 【onu】贪心
    联赛模拟测试12 C. sum 莫队+组合数
    晚间测试4 哪一天她能重回我身边 神奇建图+基环树
    联赛模拟测试11 D. 甜圈 线段树维护哈希值
    CF741D Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths 树上启发式合并(DSU ON TREE)
    CF788B Weird journey 题解
    联赛模拟测试10 C. 射手座之日
    晚间测试3 B. 单(single)
    CF538B Quasi Binary 思维题
    CF600E Lomsat gelral 树上启发式合并
  • 原文地址:https://www.cnblogs.com/dt-zhw/p/5664663.html
Copyright © 2011-2022 走看看