Spark的checkpoint源码讲解
一、Checkpoint相关源码分为四个部分
1、Checkpoint的基本使用:spark_core & spark_streaming
2、初始化的源码
3、Checkpoint的job生成及执行的过程
4、读Checkpoint的过程
二、Checkpoint的基本使用
Checkpoint可以是还原药水。辅助Spark应用从故障中恢复。SparkStreaming宕机恢复,适合调度器有自动重试功能的。对于 SparkCore 则适合那些计算链条超级长或者计算耗时的
关键点进行 Checkpoint, 便于故障恢复 。
Checkpoint和persist从根本上是不一样的:
1、Cache or persist:
Cache or persist保存了RDD的血统关系,假如有部分cache的数据丢失可以根据血缘关系重新生成。
2、Checkpoint
会将RDD数据写到hdfs这种安全的文件系统里面,并且抛弃了RDD血缘关系的记录。即使persist存储到了磁盘里面,在driver停掉之后会被删除,而checkpoint可以被下次启动使用。
Checkpoint基本使用
对于spark_streaming的checkpoint:
spark streaming有一个单独的线程CheckpointWriteHandler,每generate一个batch interval的RDD数据都会触发checkpoint操作。对于kafka的DirectKafkaInputDStreamCheckpointData,实质是重写DStreamCheckpointData的update和restore方法,这样checkpoint的数据就是topic,partition,fromOffset和untilOffset。更多请参考源码例子RecoverableNetworkWordCount
对于spark_core的checkpoint:
docheckpoint:

recover:

二、Checkpoint的初始化源码
1、设置Checkpoint目录

2、调用Checkpoint方法,构建checkpointData

三、DoCheckpoint源码
在SparkContext的runjob方法中

进入之后

RDDCheckpointData中真正做Checkpoint返回一个新的RDD并清除掉依赖关系

ReliableRDDCheckpointData中真正进行Checkpoint操作

在该方法中
1、获取sc

2、创建输出目录

3、以Job的方式进行Checkpoint操作

4、将分区策略写入Checkpoint目录

四、读取Checkpoint数据
三个方法:
1、同一个Spark任务,共有了Checkpoint的RDD,在该RDD的iterator方法中

进入 computeOrReadCheckpoint

如果进行了 Checkpoint, 条件为真firstParent[T].iterator(split, context)其中, firstParent 为
/** Returns the first parent RDD */

接着是获取依赖

假如进行了Checkpoint,那么CheckpointRDD就是存在

在初始化Checkpoint的时候,我们已经初始化了CheckpointData了。
2、RDD的计算链条失败,主动去读Checkpoint文件的过程

这个要求我们的入口类在下面这个包

3、SparkStreaming的故障恢复


首先,看一下SteamingContext的需要

然后去读取Checkpoint

分两个步骤:
A、获取最新的Checkpoint目录

B、迭代找到最新的Checkpoint就返回

最后就是使用获取的Checkpoint去构建ssc

主要是做了一下动作






Spark的checkpoint源码讲解的更多相关文章
- Qt5.5.0使用mysql编写小软件源码讲解---顾客信息登记表
Qt5.5.0使用mysql编写小软件源码讲解---顾客信息登记表 一个个人觉得比较简单小巧的软件. 下面就如何编写如何发布打包来介绍一下吧! 先下载mysql的库文件链接:http://files. ...
- 【原】Spark中Client源码分析(二)
继续前一篇的内容.前一篇内容为: Spark中Client源码分析(一)http://www.cnblogs.com/yourarebest/p/5313006.html DriverClient中的 ...
- 【原】Spark中Master源码分析(二)
继续上一篇的内容.上一篇的内容为: Spark中Master源码分析(一) http://www.cnblogs.com/yourarebest/p/5312965.html 4.receive方法, ...
- 【原】 Spark中Worker源码分析(二)
继续前一篇的内容.前一篇内容为: Spark中Worker源码分析(一)http://www.cnblogs.com/yourarebest/p/5300202.html 4.receive方法, r ...
- 源码讲解 node+mongodb 建站攻略(一期)第二节
源码讲解 node+mongodb 建站攻略(一期)第二节 上一节,我们完成了模拟数据,这次我们来玩儿真正的数据库,mongodb. 代码http://www.imlwj.com/download/n ...
- Spark Scheduler模块源码分析之TaskScheduler和SchedulerBackend
本文是Scheduler模块源码分析的第二篇,第一篇Spark Scheduler模块源码分析之DAGScheduler主要分析了DAGScheduler.本文接下来结合Spark-1.6.0的源码继 ...
- Spark Scheduler模块源码分析之DAGScheduler
本文主要结合Spark-1.6.0的源码,对Spark中任务调度模块的执行过程进行分析.Spark Application在遇到Action操作时才会真正的提交任务并进行计算.这时Spark会根据Ac ...
- Spark RPC框架源码分析(一)简述
Spark RPC系列: Spark RPC框架源码分析(一)运行时序 Spark RPC框架源码分析(二)运行时序 Spark RPC框架源码分析(三)运行时序 一. Spark rpc框架概述 S ...
- Spark RPC框架源码分析(二)RPC运行时序
前情提要: Spark RPC框架源码分析(一)简述 一. Spark RPC概述 上一篇我们已经说明了Spark RPC框架的一个简单例子,Spark RPC相关的两个编程模型,Actor模型和Re ...
随机推荐
- 记账本APP小升级
增加了显示当月总收入和总支出的功能,增加了选择收支类型的功能,删去了删除账目后恢复的功能. 1.数据库的升级 1.entity 添加了一个收支类型的字段: package com.example.ca ...
- mock.js 和easy-mock使用
mock.js 1.项目中引入mock.js <script src="../static/js/mock.js" type="text/javascript&qu ...
- 【科技】单 $\log$ 合并两棵有交集 FHQ-Treap 的方法
维护可分裂 & 合并的可重集 考虑这样一个问题: 维护 \(n\) 个 可重集 \(S_1, S_2, \cdots, S_n\),元素值域为 \([1, U]\),初始集合为空.支持一下操作 ...
- Java并发编程的艺术(五)——线程和线程的状态
线程 什么是线程 操作系统调度的最小单元就是线程,也叫轻量级进程. 为什么要使用多线程 多线程程序能够更有效率地利用多处理器核心. 用户响应时间更快. 方便程序员将程序模型映射到Java提供的多线程编 ...
- Python搭建调用本地dll的Windows服务(浏览器可以访问,附测试dll64位和32位文件)
一.前言说明 博客声明:此文链接地址https://www.cnblogs.com/Vrapile/p/14113683.html,请尊重原创,未经允许禁止转载!!! 1. 功能简述 (1)本文提供生 ...
- Java 8 新特性——实践篇
Java 8 新特性--实践篇 参考 Java8新特性 重要更新:Lambda 表达式和Stream API Lambda 表达式 Lambda 表达式引入之前: 举个场景例子:当我们要对一个班级里的 ...
- Linux下MySQL数据库的备份与恢复
Linux下MySQL数据库的备份与恢复 作者:Grey 原文地址: Github 语雀 博客园 基于版本 MySQL5.7 Deepin Linux 15.11 xtrabackup-2.4.18 ...
- 【JAVA基础】静态方法
/* * 与Python的静态单例比较: * 一样是需要加上static方法才可以直接调用类里面的私有方法 * * Python的类方法上 加上装饰器@staticmethod就可以不用实例化类而直接 ...
- 浅析JavaWeb开发模式:Model1和Model2
一.前言 在学习JavaWeb的过程中,大家都会接触到Model1和Model2,历史的发展过程是Model1 → Model2.那么它们之间有何相同之处和不同之处呢? 二.Model1 Model1 ...
- VSCode + PYQT5 搭建图形化界面
1,安装依赖 pip install -i https://mirrors.aliyun.com/pypi/simple/ PyQt5 pip install -i https://mirrors.a ...