Spark 检查点行为

Spark checkpointing behaviour

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

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

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

加上@maxime G给的分数...

Spark 不提供默认检查点。我们需要明确设置它。

Checkpointing is actually a feature of Spark Core (that Spark SQL uses for distributed computations) that allows a driver to be restarted on failure with previously computed state of a distributed computation described as an RDD

Spark 提供两种检查点。

可靠的检查点:可靠的检查点使用可靠的数据存储,如 Hadoop HDFS 或 S3。你可以通过简单地做

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

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

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

(当您 在本地模式下检查点并且启用集群自动缩放时要小心 ..)

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