Spark框架(一) —— 缓存与checkpoint

今天开始挖新坑,开始总结Spark, 同时变更一下标题样式, 使内容更加明显。j

Spark的核心在于RDD(弹性分布式数据集),但RDD具有一个特性:

只在处理过程中存在,一旦处理完释放。 

这个特性的目的在于:最大化利用资源,老旧的RDD没用了,就从内存中清理,给后续计算腾空间  

但是存在如下场景:后续的RDD‘需要基于之前某个被清理的RDD进行继承,但RDD早就被清理了

为了避免上述情况:使用持久化技术来解决

持久化技术分为两类

  • 缓存  : 将某个RDD放入内存或者磁盘中,以备后续使用   
rdd1.cache() 
rdd1.persist(StorageLevel, MEMORY_ONLY) 
rdd1.persist(StorageLevel, DISK_ONLY)
  • 由于采用分散存储的形式,不支持写入HDFS,所以缓存被认为是设计不安全的 
  • 缓存一定保留了 “ 被缓存RDD的’血缘‘关系 ”    

checkpoint

  • 也是一种持久化技术
  • 被设计认为是安全的,具体通过 收集各个分区数据进行集中存储(各Executor的缓存数据汇集再HDFS)
  • 不保留RDD间的血缘关系    
  • 不支持写入内存(所以被认为是安全的)
sc.setCheckpointDir(XXX) 
rdd.checkpoint() 

你可能感兴趣的:(大数据,Spark,spark)