Spark开发-控制操作

来源:互联网 发布:各乡镇人口数据 编辑:程序博客网 时间:2024/06/04 00:46

控制操作 control operation

1、cache(): this.type
2、persist(): this.type
3、persist(newLevel: StorageLevel, allowOverride: Boolean): this.type

在spark中对RDD进行持久化操作是一项非常重要的功能,可以将RDD持久化在不同层次的存储介质中,以便后续的操作能够重复使用,这对iterative和interactive的应用来说会极大地提高性能,

checkpoint
checkpoint接口是将RDD持久化在HDFS上,其与persist(如果也持久化在磁盘上)的一个区别是checkpoint将会切断之前的依赖关系,二persist接口依然保留着RDD的依赖关系,checkpoint的主要作用有如下2点

1、如果一个spark的程序会长时间驻留运行(如sparkstreaming),过长的依赖将会占用很多资源,那么定期地将RDD进行checkpoint操作,能够有效地节省系统资源

2、维护过长的依赖关系还会出现一个问题,如果spark在运行过程中出现节点失败的情况,那么RDD进行容错重算的成本非常高

scala> val rdd=sc.makeRDD(1 to 4,1)rdd: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[11] at makeRDD at <console>:27scala> val flatMap=rdd.flatMap(x=>Seq(x,x))flatMap: org.apache.spark.rdd.RDD[Int] = MapPartitionsRDD[12] at flatMap at <console>:29scala> sc.setCheckpointDir("temp")17/10/09 00:31:07 WARN spark.SparkContext: Checkpoint directory must be non-local if Spark is running on a cluster: tempscala> flatMap.checkpoint()scala> flatMap.dependencies.head.rddres15: org.apache.spark.rdd.RDD[_] = ParallelCollectionRDD[11] at makeRDD at <console>:27scala> flatMap.collect()res16: Array[Int] = Array(1, 1, 2, 2, 3, 3, 4, 4)scala> flatMap.dependencies.head.rddres17: org.apache.spark.rdd.RDD[_] = ReliableCheckpointRDD[13] at collect at <console>:32
原创粉丝点击