查了大部分资料,关于spark中的checkpoint有一些自己的想法。spark中的checkpoint操作设置检查节点,相对持久化操作presist而言,是切断RDD依赖的操作,但同时它将RDD操作的过程,以文件的形式存储在分布式系统中(一般是HDFS),其实我们把这完全理解为恢复RDD日志。当任务失败,spark自己可以根据checkpoint的日志信息,很快恢复数据。。。但是有人会提出sparkRDD有自己的依赖,在任务失败,,spark可以完全根据RDD的依赖完成恢复数据。。答案是yes,在spark中依赖中有宽依赖和窄依赖之分,,如果RDD的操作只是窄依赖。。。spark可以很快恢复数据,但是如果是宽依赖就要花费大量的时间,个人认为其实checkpoint就是更加详细了记录了恢复信息。。。将宽依赖恢复变成窄依赖恢复,,只是选择存储恢复RDD信息的方式不同。当然spark还提供了缓存,,感觉这就是spark的精妙之处。逻辑细节处理的很到位。
怎么用checkpoint ???
在遇到行动操作,,进行checkpoint
代码
设置检查节点的存储位置在HDFS上,并设置检查节点
val ck = sc.makeRDD(1 to 10,2)
sc.setCheckpointDir(hdfs://master:9000/spark/checkpoint)
ck.checkpoint()
//设置在遇到行动操作的时候进行检查操作
ck.dependencies.head.rdd