Spark 的持久化 & Checkpoint

简介: Spark 的持久化 & Checkpoint

一、RDD 的持久化原理(cache&persist):

首先明确一点,RDD 中是不存储数据的,如果一个 RDD 需要重复使用,那么需要从头执行来获取数据。所以,RDD 的持久化就是为了解决这一问题:

如果需要重用 RDD 的话,可以使用 cache 或者 persist 方法来实现数据持久化,将数据缓存到内存或者磁盘文件中,那么下一次操作直接可以获取数据,不需要从头执行。

cache()和 persist()的区别在于,cache()是 persist()的一种简化方式,cache()底层就是调用的 persist()无参版本 persist(MEMORY_ONLY),将数据持久化到内存中。如果需要从内存中清除缓存,可以使用 unpersist()方法。RDD 持久化是可以手动选择不同的策略的,在调用 persist()时传入对应的可选参数即可。

缓存到内存的话效率快,但不安全;磁盘文件安全但效率低,所以要综合考虑选择。

要注意一点,这两个方法并不是被调用时立即缓存,而是触发后面的 action 算子时,该 RDD 才会被缓存在计算结点的内存中,供后面重用。

 

二、Checkpoint 和持久化机制的区别

1. 最主要的区别在于,持久化只是将数据保存在内存或磁盘文件中,RDD 的依赖关系没有改变。而 checkpoint 执行完之后,RDD 的依赖关系已经改变了,没有之前的依赖关系了,只有一个 checkpointRDD,checkpoint 之后 RDD 的依赖关系就变了。

2. 持久化的数据丢失的可能性较大,因为结点的故障会导致磁盘、内存的数据丢失,但 checkpoint 的数据通常是保存在高可用的文件系统中,如 HDFS,所以数据丢失的可能性较低。

 

三、cache、persist、checkpoint 之间的区别:

补充:checkpoint 会单独执行一个作业(也就是执行两遍),来保证高可用。为了提高效率,可以联合 cache 使用,先 cache,在 checkpoint。checkpoint 会切断血缘关系,重新建立血缘关系,后面直接从 checkpoint 数据源这里拿数据,等同于改变了数据源。

 

四、checkpoint 检查点机制:

所谓的检查点其实就是将 RDD 中间结果写入磁盘。由于血缘依赖过长会造成容错成本过高,这样就不如在中间阶段做检查点容错,如果检查点之后有节点出现问题,可以从检查点开始重做血缘,减少开销。

1.checkpoint 检查点引入的原因:对于一些特别复杂的 Spark 应用,会出现某个反复使用的 RDD,即使之前持久化过,但可能会因为节点的故障导致数据丢失了,没有容错机制,所以需要重新计算一次数据,导致效率低下。而 checkpoint 的数据通常是保存在高可用的文件系统中,如 HDFS,所以数据丢失的可能性较低。

 

2. 原理:(1)Checkpoint 首先会调用 SparkContext 的 setCheckPointDIR () 方法,设置一个容错的文件系统的目录,比如说 HDFS;(2)然后对 RDD 调用 checkpoint () 方法。(3)之后在 RDD 所处的 job 运行结束之后,会启动一个单独的 job,来将 checkpoint 过的 RDD 数据写入之前设置的文件系统,进行高可用、容错的类持久化操作。

 

3.应用场景:除了为了重复使用数据,这两个场合也可以使用 checkpoint 检查点:(1)当 spark 应用程序特别复杂,从初始的 RDD 开始到最后,整个应用程序的完成有很多的步骤,数据执行较长;(2)或数据比较重要的场合,都是可以使用 checkpoint 功能。

 

4. 作用:检查点机制是我们在 spark streaming 中用来保障容错性的主要机制,它可以使spark streaming 阶段性的把应用数据存储到诸如 HDFS 等可靠存储系统中,以供恢复时使用。具体来说基于以下两个目的服务:

(1)控制发生失败时需要重算的状态数。Spark streaming 可以通过转化图的谱系图来重算状态,检查点机制则可以控制需要在转化图中回溯多远。

(2) 提供驱动器程序容错。如果流计算应用中的驱动器程序崩溃了,你可以重启驱动器程序并让驱动器程序从检查点恢复,这样 spark streaming 就可以读取之前运行的程序处理数据的进度,并从那里继续。

相关文章
|
1月前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
2月前
|
存储 缓存 分布式计算
大数据-89 Spark 集群 RDD 编程-高阶 编写代码、RDD依赖关系、RDD持久化/缓存
大数据-89 Spark 集群 RDD 编程-高阶 编写代码、RDD依赖关系、RDD持久化/缓存
46 4
|
7月前
|
存储 缓存 分布式计算
Spark学习--day04、RDD依赖关系、RDD持久化、RDD分区器、RDD文件读取与保存
Spark学习--day04、RDD依赖关系、RDD持久化、RDD分区器、RDD文件读取与保存
133 1
|
7月前
|
存储 缓存 分布式计算
Spark RDD持久化与缓存:提高性能的关键
Spark RDD持久化与缓存:提高性能的关键
|
存储 缓存 分布式计算
大数据Spark RDD持久化和Checkpoint
大数据Spark RDD持久化和Checkpoint
113 0
|
存储 缓存 分布式计算
Spark RDD持久化的三种方式
Spark RDD持久化的三种方式
218 0
|
存储 缓存 分布式计算
Spark学习--3、WordCount案例、RDD序列化、RDD依赖关系、RDD持久化(二)
Spark学习--3、WordCount案例、RDD序列化、RDD依赖关系、RDD持久化(二)
|
存储 缓存 分布式计算
Spark学习--3、WordCount案例、RDD序列化、RDD依赖关系、RDD持久化(一)
Spark学习--3、WordCount案例、RDD序列化、RDD依赖关系、RDD持久化(一)
|
分布式计算 Spark
|
分布式计算 Spark Hadoop
spark源码分析之Checkpoint的过程
spark源码分析系列,spark版本1.5.2
3441 0