• 锦
    2019-05-17
    区别在于Checkpoint会清空该RDD的依赖关系,并新建一个CheckpointRDD依赖关系,让该RDD依赖,并保存在磁盘或HDFS文件系统中,当数据恢复时,可通过CheckpointRDD读取RDD进行数据计算;持久化RDD会保存依赖关系和计算结果至内存中,可用于后续计算。

    作者回复: 👍🏻

     1
     27
  • 涵
    2019-05-17
    从目的上来说,checkpoint用于数据恢复,RDD持久化用于RDD的多次计算操作的性能优化,避免重复计算。从存储位置上看checkpoint储存在外存中,RDD可以根据存储级别存储在内存或/和外存中。
    
     8
  • hua168
    2019-05-17
    老师,我想问下,如果是linux 命令分析单机300G log日志,内存只有16G,怎搞?
    如果用spark思想,,从io读很卡,直接内存爆了。
    如果先分割日志为100份,再用shell,一下10个并发执行,最后结果合并。感觉还是有点慢。

    作者回复: 如果限定为单机处理,我觉得你的第二个思路是可行的,第一个行不通。

    
     6
  • 珅剑
    2019-06-11
    1.设置checkpoint时需要指定checkpoint的存储目录,而持久化不管是直接调用cache还是通过persist指定缓存级别都不需要指定存储目录,由系统自己指定
    2.checkpoint是将RDD去除依赖关系后将数据直接存储到磁盘,且一般是HDFS,带有备份,因此不容易丢失,恢复时直接获取checkpoint的数据;而持久化一般是直接cache到内存。数据容易丢失,即便是通过设置MEMORY_AND_DISK_2等缓存级别达到内存和磁盘都有备份,也会在每个备份中都缓存RDD的依赖关系,造成不必要的冗余
    
     4
  • JohnT3e
    2019-05-17
    两者区别在于依赖关系是否保留吧。checkpoint的话,检查点之前的关系应该丢失了,但其数据已经持久化了;而persist或者cache保留了这个依赖关系,如果缓存结果有丢失,可以通过这个关系进行rebuild。

    作者回复: 这位同学的理解很准确

    
     3
  • RocWay
    2019-05-17
    主要区别应该是对依赖链的处理:
    checkpoint在action之后执行,相当于事务完成后备份结果。既然结果有了,之前的计算过程,也就是RDD的依赖链,也就不需要了,所以不必保存。
    但是cache和persist只是保存当前RDD,并不要求是在action之后调用。相当于事务的计算过程,还没有结果。既然没有结果,当需要恢复、重新计算时就要重放计算过程,自然之前的依赖链不能放弃,也需要保存下来。需要恢复时就要从最初的或最近的checkpoint开始重新计算。

    作者回复: 这位同学的理解是很准确的

    
     3
  • Peter
    2019-05-18
    在计算过程中,对于一些计算过程比较耗时的 RDD,我们可以将它缓存至硬盘或 HDFS 中,标记这个 RDD 有被检查点处理过,并且清空它的所有依赖关系。同时,给它新建一个依赖于 CheckpointRDD 的依赖关系,CheckpointRDD 可以用来从硬盘中读取 RDD 和生成新的分区信息。
    
     2
  • 挖矿的小戈
    2019-05-17
    1. 前者:persist或者cache除了除了持久化该RDD外,还会保留该RDD前面的依赖关系
    2. 后者:将该RDD保存到磁盘上,并清除前面的依赖关系
    感觉后者的开销会大很多

    作者回复: 理解的很对

    
     2
  • miwucc
    2019-05-17
    手动调用缓存函数和checkpoint本质上是一样的吧。就是一个手动控制落盘时间,一个自动控制。

    作者回复: 并不是,checkpoint会将一些RDD的结果存入硬盘,但是不会保留依赖关系;缓存函数或者持久化处理会保留依赖关系,所以错误恢复会更方便。

    
     2
  • 夜吾夜
    2019-09-25
    我是否可以这样理解,使用checkpoint,而不是用持久化的RDD来进行数据恢复,是因为当从某一个节点进行回放时,checkpoint的路径比持久化RDD短,更能节省时间,但spark的这种机制也决定了它不支持确定性计算。
    
     1
  • refactor
    2019-07-22
    cache 和 checkpoint 区别:1.产生过程,cache 是 partition 分区计算完后就执行,而后者是要整个 rdd 计算完再去起新的 job 完成,成本更大;2.执行完后 cache 无论存在内存还是硬盘都会被清理,而 后者不会,除非手动清理;3.cache保存依赖关系,而后者删除所有依赖关系。4.读取一个同时被 cache 和 checkpoint 处理过的 rdd,会先读取前者。
    
     1
  • Peter
    2019-05-18
    在缓存 RDD 的时候,它所有的依赖关系也会被一并存下来。所以持久化的 RDD 有自动的容错机制。如果 RDD 的任一分区丢失了,通过使用原先创建它的转换操作,它将会被自动重算

    作者回复: 👍🏻

    
     1
  • cricket1981
    2019-05-17
    RDD的checkpoint会导致写入可靠存储的开销。这可能导致RDD被checkpoint的那些批次的处理时间增加。相反,checkpoint太过不频繁会导致血统链增长和任务大小增加。请问该如何设置合理的checkpoint时间间隔呢?
    
     1
  • jon
    2019-05-17
    checkpoint不会存储该rdd前面的依赖关系,它后面的rdd都依赖于它。
    persist、 cache操作会存储依赖关系,当一个分区丢失后可以根据依赖重新计算。

    作者回复: 👍🏻

    
     1
  • cricket1981
    2019-05-17
    终于明白spark惰性求值的原理了。我理解对 RDD 进行持久化操作和记录 Checkpoint的区别是:前者是开发人员为了避免重复计算、减少长链路计算时间而主动去缓存中间结果,而后者是spark框架为了容错而提供的保存中间结果机制,它对开发人员是透明的,无感知的。

    作者回复: 这些机制对开发者并不是透明的,开发者可以手动调用checkpoint和cache方法来存储RDD。他们的主要区别是是否存储依赖关系。

    
     1
  • 明翼
    2019-05-17
    checkpoint用的不多,是不是可以对目前所有的rdd均缓存,rdd是针对特定rdd缓存
    
     1
  • 露娜
    2019-08-03
    如果一个DAG图中出现菱形结构,我持久化会提高效率吗?在一个Action的DAG血缘图里,有个父RDD被两个子RDD依赖。
    
    
  • 淹死的大虾
    2019-06-24
    持久化到内存就不说了,用完就没了。和持久化到硬盘比,checkpoint只需要按需在关键节点储存,持久化则所有操作节点都会
    
    
  • Flash
    2019-06-04
    检查点是Spark的一个容错机制,应该是会自动缓存那些计算比较耗时的RDD,缓存的是进行计算动作的RDD。
    持久化是Spark针对转换操作的RDD进行缓存,需要开发人员手动调用persist或cache方法。
    
    
  • 徐宁
    2019-06-01
    看图一spark sql支持jdbc吗?老师能给个链接不?
    
    
我们在线,来聊聊吧