Spark核心编程-RDD控制操作

Spark可以将RDD持久化到内存或者磁盘,持久化到内存可以极大的提高迭代计算以及计算模型之间的数据共享,一般情况下,执行节点60%内存用于缓存数据,剩下40%用于运行任务。Spark使用persist、cache进行操作持久化,其中cache是persist的特例。

  • cache():RDD[T]
  • persist():RDD[T]
  • persist(level:StorageLevel):RDD[T]
Persist可以指定StorageLevel,当StorageLevel为MEMORY_ONLY的时候就是cache。具体存储类型如下:
val NONE = new StorageLevel(false, false, false, false)
val DISK_ONLY= new StorageLevel(true, false, false, false)
val DISK_ONLY_2= new StorageLevel(true, false, false, false, 2)
val MEMORY_ONLY= new StorageLevel(false, true, false, true)
val MEMORY_ONLY_2= new StorageLevel(false, true, false, true, 2)
val MEMORY_ONLY_SER= new StorageLevel(false, true, false, false)
val MEMORY_ONLY_SER_2= new StorageLevel(false, true, false, false, 2)
val MEMORY_AND_DISK= new StorageLevel(true, true, false, true)
val MEMORY_AND_DISK_2= new StorageLevel(true, true, false, true, 2)
val MEMORY_AND_DISK_SER= new StorageLevel(true, true, false, false)
val MEMORY_AND_DISK_SER_2= new StorageLevel(true, true, false, false, 2)
val OFF_HEAP = new StorageLevel(true, true, true, false, 1)

在Spark中可以使用checkpoint操作设置检查点,相对持久化persist而言,checkpoint将切断与该RDD的之前的依赖关系。设置检查点对包含依赖关系的长血统RDD是非常有用的,可以避免占用过多的系统资源和节点失败情况下重新计算成本过高的问题。

val rdd = sc.makeRDD(1 to 4,1)
val flatMapRDD = rdd.flatMap(x => Seq(x,x))
// 设置检查点HDFS存储位置
sc.setCheckpointDir("hdfs://hadoop:8020/user/hadoop/checkpoint/")
// 使用checkpoint设置检查点,属于懒加载
flatMapRDD.checkpoint()
// 在遇到行动操作的时候,进行检查点操作,检查点前为ParallelCollectionRDD[0],而检查点后为ParallelCollectionRDD[1]
flatMapRDD.dependencies.head.rdd
flatMapRDD.collect
flatMapRDD.dependencies.head.rdd

猜你喜欢

转载自blog.csdn.net/Anbang713/article/details/81587919