Spark開發-控制操作

Xlucas發表於2017-10-09

控制操作 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>:27

scala> val flatMap=rdd.flatMap(x=>Seq(x,x))
flatMap: org.apache.spark.rdd.RDD[Int] = MapPartitionsRDD[12] at flatMap at <console>:29

scala> 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: temp

scala> flatMap.checkpoint()

scala> flatMap.dependencies.head.rdd
res15: org.apache.spark.rdd.RDD[_] = ParallelCollectionRDD[11] at makeRDD at <console>:27
scala> flatMap.collect()
res16: Array[Int] = Array(1, 1, 2, 2, 3, 3, 4, 4)

scala> flatMap.dependencies.head.rdd
res17: org.apache.spark.rdd.RDD[_] = ReliableCheckpointRDD[13] at collect at <console>:32

相關文章