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来 ...
随机推荐
- c盘太小
C:\Users\Administrator\AppData\Roaming\Apple Computer
- 如何判断一个数是否为素数(zt)
怎么判断一个数是否为素数? 笨蛋的作法: bool IsPrime(unsigned n){ if (n<2) { //小于2的数即不是合数也不是素数 throw 0; ...
- TIANKENG’s rice shop
Problem Description TIANKENG managers a pan fried rice shop. There are n kinds of fried rice numbere ...
- CentOS(十)--与Linux文件和目录管理相关的一些重要命令②
在结束了第二期的广交会实习之后,又迎来了几天休闲的日子,继续学习Linux.在上一篇随笔 Linux学习之CentOS(十七)--与Linux文件和目录管理相关的一些重要命令① 中,详细记录了与Lin ...
- LeetCode 274
H-Index Given an array of citations (each citation is a non-negative integer) of a researcher, write ...
- 高可用软件Keepalived
关于高可用软件Keepalived的使用及配置请参见:http://www.voidcn.com/blog/9124573/article/p-5990263.html
- hdu 4679 树状dp
思路:我们其实只需要枚举每条边,求得最小值就行了. 先dfs算出每个节点作为根时,其子树的最长路径,以及进过该节点的最长,次长,第三长路径. 然后在次dfs枚举求出切断某条边,求出这条边的两个端点为子 ...
- web_find和web_reg_find的用法和区别
一.web_find()函数 该函数的作用是“在页面中查找相应的内容”,常用参数及含义如下: web_find("web_find", //定义该查找函数的名称 "Rig ...
- 【转】android应用程序签名
概述 Android系统要求,所有的程序经过数字签名后才能安装.Android系统使用这个证书来识别应用程序的作者,并且建立程序间的信任关系.证书不是用于用户控制哪些程序可以安装.证书不需要授权中心来 ...
- MyBatis(3.2.3) - Configuring MyBatis using XML, typeAliases
In the SQL Mapper configuration file, we need to give the fully qualified name of the JavaBeans for ...