一、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源码讲解的更多相关文章

  1. Qt5.5.0使用mysql编写小软件源码讲解---顾客信息登记表

    Qt5.5.0使用mysql编写小软件源码讲解---顾客信息登记表 一个个人觉得比较简单小巧的软件. 下面就如何编写如何发布打包来介绍一下吧! 先下载mysql的库文件链接:http://files. ...

  2. 【原】Spark中Client源码分析(二)

    继续前一篇的内容.前一篇内容为: Spark中Client源码分析(一)http://www.cnblogs.com/yourarebest/p/5313006.html DriverClient中的 ...

  3. 【原】Spark中Master源码分析(二)

    继续上一篇的内容.上一篇的内容为: Spark中Master源码分析(一) http://www.cnblogs.com/yourarebest/p/5312965.html 4.receive方法, ...

  4. 【原】 Spark中Worker源码分析(二)

    继续前一篇的内容.前一篇内容为: Spark中Worker源码分析(一)http://www.cnblogs.com/yourarebest/p/5300202.html 4.receive方法, r ...

  5. 源码讲解 node+mongodb 建站攻略(一期)第二节

    源码讲解 node+mongodb 建站攻略(一期)第二节 上一节,我们完成了模拟数据,这次我们来玩儿真正的数据库,mongodb. 代码http://www.imlwj.com/download/n ...

  6. Spark Scheduler模块源码分析之TaskScheduler和SchedulerBackend

    本文是Scheduler模块源码分析的第二篇,第一篇Spark Scheduler模块源码分析之DAGScheduler主要分析了DAGScheduler.本文接下来结合Spark-1.6.0的源码继 ...

  7. Spark Scheduler模块源码分析之DAGScheduler

    本文主要结合Spark-1.6.0的源码,对Spark中任务调度模块的执行过程进行分析.Spark Application在遇到Action操作时才会真正的提交任务并进行计算.这时Spark会根据Ac ...

  8. Spark RPC框架源码分析(一)简述

    Spark RPC系列: Spark RPC框架源码分析(一)运行时序 Spark RPC框架源码分析(二)运行时序 Spark RPC框架源码分析(三)运行时序 一. Spark rpc框架概述 S ...

  9. Spark RPC框架源码分析(二)RPC运行时序

    前情提要: Spark RPC框架源码分析(一)简述 一. Spark RPC概述 上一篇我们已经说明了Spark RPC框架的一个简单例子,Spark RPC相关的两个编程模型,Actor模型和Re ...

随机推荐

  1. CTFD平台部署自制题目指北(灌题)

    给实验室同学搭建的CTFD平台用于内部训练和CTF的校赛,为了循序渐进当然是先内部出一些简单入门的题目,但是网上大部分关于CTFD平台的都只是部署,而关于题目放置的内容却很少,虽然这个过程比较简单,但 ...

  2. pandas 删除列

    ddf = pd.DataFrame({"id":[1,2,3], "name":[4,5,6],"age":[7,8,9]})ddf = ...

  3. 团队作业5_测试与发布(Alpha版本)

    Alpha版本测试报告 1.测试找出的bug(N个): (1)修复的Bug:很多个,主要是一些疏忽造成的,比如请求url写错导致数据加载不了.比较有意义的bug是因为使用redux,但是用户刷新后数据 ...

  4. 题解-CmdOI2019 口头禅

    题面 CmdOI2019 口头禅 给 \(n\) 个 \(01\) 串 \(s_i\),\(m\) 个询问问 \(s_{l\sim r}\) 的最长公共子串长度. 数据范围:\(1\le n\le 2 ...

  5. 题解-CF1239D Catowice City

    CF1239D Catowice City 有 \(n\) 个人和 \(n\) 只猫.有 \(m\) 对人猫友谊,即第 \(u_i\) 个人认识第 \(v_i\) 只猫,保证第 \(i\) 个人和第 ...

  6. 基于gin的golang web开发:实现用户登录

    前文分别介绍过了Resty和gin-jwt两个包,Resty是一个HTTP和REST客户端,gin-jwt是一个实现了JWT的Gin中间件.本文将使用这两个包来实现一个简单的用户登录功能. 环境准备 ...

  7. gunicorn简单配置

    Gunicorn配置 # -*- coding: utf-8 -*- import os from multiprocessing import cpu_count bind = "127. ...

  8. cocosCreator微信小游戏排行榜思路

    cocosCreator制作微信小游戏排行榜实现方案: 游戏认知:项目分为主域和子域,主域就是游戏主程部分,子域为单独处理微信排行榜公共域数据的. 游戏主域里创建一个节点,添加WXSubContext ...

  9. Reflect个人记录

    Reflect是一个内置方法,并不能通过构造函数的来进行构建 Reflect.construct: 与new操作父有一些类似,相当于new target(...) 例: 我们先自己定义一个类 clas ...

  10. Flink连接器-批处理-读写Hbase

    Flink批处理与hbase的读写 source-hbase 父类 是模仿官方写的. import org.apache.flink.api.common.io.LocatableInputSplit ...