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 就可以读取之前运行的程序处理数据的进度,并从那里继续。

相关文章
|
3月前
|
存储 缓存 分布式计算
Spark RDD持久化与缓存:提高性能的关键
Spark RDD持久化与缓存:提高性能的关键
|
7月前
|
存储 缓存 分布式计算
大数据Spark RDD持久化和Checkpoint
大数据Spark RDD持久化和Checkpoint
44 0
|
8月前
|
存储 缓存 分布式计算
Spark学习--3、WordCount案例、RDD序列化、RDD依赖关系、RDD持久化(二)
Spark学习--3、WordCount案例、RDD序列化、RDD依赖关系、RDD持久化(二)
|
8月前
|
存储 缓存 分布式计算
Spark学习--3、WordCount案例、RDD序列化、RDD依赖关系、RDD持久化(一)
Spark学习--3、WordCount案例、RDD序列化、RDD依赖关系、RDD持久化(一)
|
10月前
|
存储 缓存 分布式计算
Spark RDD持久化的三种方式
Spark RDD持久化的三种方式
140 0
|
存储 缓存 分布式计算
Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(下)
Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(下)
106 0
Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(下)
|
缓存 分布式计算 大数据
Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(中)
Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(中)
143 0
Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(中)
|
缓存 分布式计算 Scala
Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(上)
Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(上)
188 0
Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(上)
|
分布式计算 监控 流计算
|
存储 SQL 缓存
Spark RDD详解 —— RDD特性、lineage、缓存、checkpoint、依赖关系
RDD(Resilient Distributed Datasets)弹性的分布式数据集,又称Spark core,它代表一个只读的、不可变、可分区,里面的元素可分布式并行计算的数据集。
Spark RDD详解 —— RDD特性、lineage、缓存、checkpoint、依赖关系