Spark检查点行为

问题描述

在我们开始新工作时,Spark是否使用检查点?假设我们使用检查点将一些RDD写入磁盘。在执行新作业期间,是否会重新计算或从磁盘加载所述RDD?

解决方法

在作业开始时,如果您的检查点位置存在RDD,则会将其加载。

这也意味着,如果您更改代码,则还应注意检查点,因为带有旧代码的RDD会加载新代码,并且可能导致冲突。

,

除了@maxime G给出的要点...

Spark不提供默认检查点。.我们需要对其进行显式设置。

检查点实际上是Spark Core的功能(Spark SQL使用 用于分布式计算),该驱动程序可以在 先前计算的分布式计算状态失败 被描述为RDD

Spark提供两种检查点。

可靠的检查点:可靠的检查点使用可靠的数据存储,例如Hadoop HDFS或S3。而您只需完成操作即可

sparkContext.setCheckpointDir("(hdfs:// or s3://)tmp/checkpoint/")
then dataframe.checkpoint(eager = true)

不可靠的检查点:本地检查点使用执行程序存储(即节点本地磁盘存储)将检查点文件写入执行程序生命周期,并且由于执行程序生命周期而被认为是不可靠的,并且它不承诺将数据传递给如果作业突然终止,则可用。

sparkContext.setCheckpointDir("/tmp/checkpoint/").
 dataframe.localCheckpoint(eager = true)

(在本地环境中检查点并且启用集群自动缩放功能时要小心。)

注意: 根据检查点操作员的急切标志检查点可以是渴望的,也可以是懒惰的。急切检查点是默认检查点,当请求时立即发生。惰性检查点不会,只有在执行操作时才会发生。 急切的检查点将创建一个立即阶段的障碍,稍后将等待任何特定操作发生并记住所有先前的转换。