Spark系列——缓存(cache/persist)与检查点(checkpoint)以及二者的对比

一、缓存

cachepersist是RDD的两个API,cache底层调用的就是persist,区别在于cache不能指定缓存方式,只能缓存在内存中,但是persist可以指定缓存方式,比如:缓存在内存中、内存和磁盘并序列化等。通过RDD的缓存,后续可以对此RDD或者基于此RDD衍生出的其他RDD处理重用这些缓存的数据集。

二、checkpoint

本质上是将RDD写入磁盘做检查点(通常是checkpint到HDFS上)。在生产环境中,往往在RDD上会执行各种操作,使得DAG图会拉的非常长,为防止中间某个环节出问题而影响正常的计算,会使用checkpoint机制将重要的RDD存到HDFS上,这样,出错以后就不必要回到最初的RDD重新计算,而是可以直接从checkpoint位置重新运算。

三、缓存和检查点的对比

  1. 都是lazy操作,只有action算子触发以后才会真正的进行缓存或者checkpoint。lazy操作时Spark的一个重要特性,不仅适用于RDD还适用于Spark SQL。
  2. cache只缓存数据,不改变lineage,但比较容易丢失数据。
  3. checkpoint改变原有的lineage,生成新的checkpointRDD,通常存于HDFS中,高可用且更可靠。

猜你喜欢

转载自blog.csdn.net/Cxf2018/article/details/109478984