Spark Streaming揭秘 Day33 checkpoint的使用
Spark Streaming揭秘 Day33
checkpoint的使用
今天谈下sparkstreaming中,另外一个至关重要的内容Checkpoint。
首先,我们会看下checkpoint的使用。另外,会看下在应用程序重新启动时,是如何处理checkpoint的。
Checkpoint保存什么
checkpoint作为容错的设计,基本思路是把当前运行的状态,保存在容错的存储系统中(一般是hdfs)。对于容错的处理,肯定是围绕作业紧密相关的,保存内容包括元数据和数据两部分。
从元数据角度讲,SparkStreaming中会有哪些内容需要保存呢,主要有三类:
- 程序的配置
- 应用程序的业务逻辑,保存在DStreamGraph里。
- 还有哪些没有处理的数据,即没有完成的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
Spark Streaming揭秘 Day33 checkpoint的使用的更多相关文章
- Spark Streaming揭秘 Day32 WAL框架及实现
Spark Streaming揭秘 Day32 WAL框架及实现 今天会聚焦于SparkStreaming中非常重要的数据安全机制WAL(预写日志). 设计要点 从本质点说,WAL框架是一个存储系统, ...
- Spark Streaming揭秘 Day28 在集成开发环境中详解Spark Streaming的运行日志内幕
Spark Streaming揭秘 Day28 在集成开发环境中详解Spark Streaming的运行日志内幕 今天会逐行解析一下SparkStreaming运行的日志,运行的是WordCountO ...
- Spark Streaming揭秘 Day26 JobGenerator源码图解
Spark Streaming揭秘 Day26 JobGenerator源码图解 今天主要解析一下JobGenerator,它相当于一个转换器,和机器学习的pipeline比较类似,因为最终运行在Sp ...
- Spark Streaming揭秘 Day13 数据安全容错(Driver篇)
Spark Streaming揭秘 Day13 数据安全容错(Driver篇) 书接上回,首先我们要考虑的是在Driver层面,有哪些东西需要维持状态,只有在需要维持状态的情况下才需要容错,总的来说, ...
- Spark Streaming揭秘 Day12 数据安全容错(Executor篇)
Spark Streaming揭秘 Day12 数据安全容错(Executor篇) 今天,让我们研究下SparkStreaming在Executor端的数据安全及容错机制. 在SparkStreami ...
- Spark Streaming揭秘 Day6 关于SparkStreaming Job的一些思考
Spark Streaming揭秘 Day6 关于SparkStreaming Job的一些思考 Job是SparkStreaming的重要基础,今天让我们深入,进行一些思考. Job是什么? 首先, ...
- Spark Streaming揭秘 Day4-事务一致性(Exactly one)
Spark Streaming揭秘 Day4 事务一致性Exactly one 引子 对于业务处理系统,事务的一致性非常的关键,事务一致性(Exactly one),简单来说,就是输入数据一定会被处理 ...
- Spark Streaming揭秘 Day3-运行基石(JobScheduler)大揭秘
Spark Streaming揭秘 Day3 运行基石(JobScheduler)大揭秘 引子 作为一个非常强大框架,Spark Streaming兼具了流处理和批处理的特点.还记得第一天的谜团么,众 ...
- Spark Streaming揭秘 Day35 Spark core思考
Spark Streaming揭秘 Day35 Spark core思考 Spark上的子框架,都是后来加上去的.都是在Spark core上完成的,所有框架一切的实现最终还是由Spark core来 ...
随机推荐
- 使用Loadrunner进行接口测试
在工作中很多时候都需要进行接口测试,如果只是进行接口的功能测试这个很简单,两种类型: 1.如果是基于get的直接使用浏览器进行访问,查看服务器返回的数据是否正确就行, 2.如果是基于post的可以接触 ...
- VBA-工程-找不到工程或库-解决方案
近来,越来越多的朋友被“找不到工程或库”的错误所烦恼,所以决定新开一帖来聊聊此问题! QUOTE: 一般情况下,出现此错误是因为找不到引用工程,或找不到与工程语言对应的引用的对象库 出现此类错误可以根 ...
- JavaWeb中登陆功能
首先我们要JavaWeb登陆的基本流程:JSP页面发送请求-->Servlet-->Servlet通过调用方法从数据库中得到数据并将结果返回页面 我们先建立三个jsp页面,包括login. ...
- 使用JS制作一个鼠标可拖的DIV(一)——鼠标拖动
使用 JS 来实现一个可拖动的DIV,主要是使用到以下几个事件: 1.鼠标按下:DIV元素的onmousedown. 2.鼠标按住拖动:document 的 onmousemove 元素. 3.鼠标放 ...
- 关于 ES6箭头函数
转自 http://simplyy.space/article/577c5b0dcbe0a3e656c87c24 多个连续的箭头函数与柯里化 高阶函数 高阶函数定义:将函数作为参数或者返回值是函 ...
- [课程相关]homework-08
一.变量作用域和生命周期 #include <cstdlib> #include <iostream> using namespace std; void try_change ...
- 常用html演示模板
--学习测试新的css,js,经常用到test.html,在这里放一个: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transition ...
- PHPnow开启PHP扩展里openssl支持的方法
PHPnow 是 Win32 下绿色的 Apache + PHP + MySQL 环境套件包.简易安装.快速搭建支持虚拟主机的 PHP 环境.更多介绍<PHP服务套件 PHPnow1.5.6&g ...
- Activity保持关闭不销毁
activity按back键 消失但是不销毁的实现 重新定义finish()方法: @Override public void finish() { // TODO Auto-ge ...
- DataTables手动带参数提交至服务器
一:参数传递及接收 JavaScript: 黄背景部分为参数传递关键 <script type="text/javascript"> var table; var de ...