问题描述
在我们开始新工作时,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)
(在本地环境中检查点并且启用集群自动缩放功能时要小心。)
注意: 根据检查点操作员的急切标志,检查点可以是渴望的,也可以是懒惰的。急切检查点是默认检查点,当请求时立即发生。惰性检查点不会,只有在执行操作时才会发生。 急切的检查点将创建一个立即阶段的障碍,稍后将等待任何特定操作发生并记住所有先前的转换。