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。

那关键就是getOrCreate方法

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

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

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

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

使用checkpoint恢复

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

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

之后是恢复DStreamGraph。

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

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

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

最后,还有恢复checkpointDuration。

Checkpoint的生成

生成是在JobGenerator中触发。

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

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

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

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

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

最新文章

  1. CSS知识总结(五)
  2. BZOJ4247挂饰
  3. iOS开发小技巧--获取自定义的BarButtonItem中的自定义View的方法(customView)
  4. IEnumerable、GetEnumerator、IEnumerator的理解
  5. SQL server 数据库连接方式分析
  6. JS动态呈现还可以输入字数
  7. linux磁盘设备知识
  8. Vijos_1218_数字游戏_(划分型动态规划+环状动态规划)
  9. My.Ioc 代码示例——属性和方法注入
  10. javascript中的一些基本方法收藏
  11. sed的用法
  12. 学习Python Day1
  13. [UWP]分享一个基于HSV色轮的调色板应用
  14. Zabbix 添加脚本检测IP变化
  15. 关于form表单上传图片的一些记录
  16. WPF DataGridHyperlinkColumn
  17. 一、 kettle开发、上线常见问题以及防错规范步骤
  18. 《Thinking in Java》学习笔记(四)
  19. 部署wcf出现的问题与解决方法
  20. LeetCode之“散列表”:Contains Duplicate && Contains Duplicate II

热门文章

  1. BootStrap2学习日记2--将固定布局换成响应式布局
  2. poj3080解题报告(暴力、最大公共子串)
  3. 使用dispatch_group实现并封装分组并发网络请求
  4. python(5)- sys.stdout()实现进度条
  5. linux cd
  6. [改善Java代码]避免带有变长参数的方法重载
  7. c#语法笔记
  8. html5 之 canvas 相关知识(一)概念及定义
  9. SQL Server 2008 错误15023:当前数据库中已存在用户或角色
  10. iOS - 视图与手势(UIview & UIGestureRecognizer)