RDD只支持粗粒度转换,即在大量记录行执行的单个操作。将创建的RDD的一系列Lineage(血统)记录下来,以便恢复丢失的分区。RDD的Lineage会记录RDD的元数据信息和转换行为,当该RDD的部分分区数据丢失时,它可以根据这些信息来重新运算和恢复丢失的数据分区。
容错。
RDD和它依赖的父RDDs的关系有两种不同的类型
- 窄依赖(narrow dependency) 一对一
- 宽依赖(wide dependency) 一对多
1)窄依赖指的是每一个父RDD的Partition最多被子RDD的一个Partition使用,窄依赖我们形象的比喻为独生子女
2)宽依赖指的是多个子RDD的Partition会依赖同一个父RDD的Partition,会引起shuffle,总结:宽依赖我们形象的比喻为超生


依赖关系查看
package com.atguigu
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object Lineage {
def main(args: Array[String]): Unit = {
val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("Spark01_Partition")
//构建spark上下文对象
val sc = new SparkContext(conf)
val rdd: RDD[Int] = sc.makeRDD(List(1,2,3,4,5,6))
val rdd1: RDD[(Int, Int)] = rdd.map((_,1)).reduceByKey(_+_)
rdd1.dependencies.foreach(println)
}
}
org.apache.spark.ShuffleDependency@4d96250
ShuffleDependency宽依赖
网友评论