美文网首页
Spark-RDD的依赖关系

Spark-RDD的依赖关系

作者: 布莱安托 | 来源:发表于2020-07-06 19:57 被阅读0次

Lineage

RDD只支持粗粒度转换,即在大量记录上执行的单个操作。将创建RDD的一系列关系(称为Lineage,血缘)记录下来,以便恢复丢失的分区。

RDD的血缘会记录RDD的元数据信息和转换行为,当该RDD的部分分区数据丢失时,他可以根据这些信息来重新运算,以恢复丢失的数据分区。

image.png

例如:

val inputRdd = sc.parallelize(Array(1, 2, 3, 4, 5, 6))
val mapRdd = inputRdd.map((_, 1))
val reduceRdd = mapRdd.reduceByKey(_ + _)
println(reduceRdd.toDebugString)
/*
    输出结果为:
    (4) ShuffledRDD[2] at reduceByKey at LineageDemo.scala:11 []
        +-(4) MapPartitionsRDD[1] at map at LineageDemo.scala:10 []
            |  ParallelCollectionRDD[0] at parallelize at LineageDemo.scala:9 []
*/
println(reduceRdd.dependencies)
/*
    输出结果为:
    List(org.apache.spark.ShuffleDependency@6145b81e)
*/

通过toDebugString方法我们可以得到RDD转换行为的依赖关系,通过dependencies参数可以得到RDD依赖关系的列表。

其中RDD和父RDD间的依赖分为两种,窄依赖(Narrow Dependency)和宽依赖(Wide Dependency)。

窄依赖

窄依赖指一个父RDD的分区数据最多被子RDD的一个分区使用。

image.png

宽依赖

宽依赖指多个RDD的分区会依赖同一个父RDD分区,会引起shuffle。

image.png

DAG

DAG(Direct Acyclic Graph)称为有向无环图,原始的RDD通过一系列的转换形成DAG,根据RDD间的依赖关系不同,将DAG划分为不同的Stage。

对于窄依赖,分区的转换操作在同一Stage中完成计算;而对于宽依赖,由于有Shuffle的存在,只能当父RDD完成计算后,才能开始下一步的计算,所以宽依赖是划分Stage的依据。

任务划分

RDD的任务分为:Application、Job、Stage和Task。

1)Application:初始化一个SparkContext即生成一个Application

2)Job:一个行动算子会生成一个Job

3)Stage:根据RDD间依赖关系的不同,将Job划分为不同的Stage,每有一个宽依赖就会划分一个Stage

4)Task:Stage是一个TaskSet,将Stage划分的结果发送到不同Executor执行即为一个Task

相关文章

  • Spark-RDD的依赖关系

    Lineage RDD只支持粗粒度转换,即在大量记录上执行的单个操作。将创建RDD的一系列关系(称为Lineage...

  • 1.3 Spark-RDD的依赖关系

    RDD的依赖关系分为两种: 窄依赖(A>B) 定义:父RDD的一个分区最多被子RDD的一个分区依赖。有两中情况: ...

  • 依赖的关系

    人们生活在社会当中,就离不开与他人打交道,这种人和人之间的联系纽带是无法彻底断开的。每个人都要成长,处理好人际关系...

  • 解决Android项目中第三方库依赖冲突的方法

    解决依赖冲突步骤 一.查看依赖关系,找到有冲突的依赖 二.剔除部分依赖关系,或强制使用某指定版本的依赖关系。 一、...

  • 依赖关系

    昨天下午在办公室,被牛哥教育了。 牛哥说:“我是很理解你现在的心境,因为我也是,就是日复一日,没有斗志,不过你如果...

  • 依赖关系

    1、类A调用类B的静态方法 2、类B作为类A方法的形参 3、类B作为类A方法的局部变量

  • 依赖关系

    1、规范化理论-函数依赖 设R(U)是属性U上的一个关系模式,X和Y是U的子集,r为R的任一关系,如果对于r中的任...

  • Maven 依赖关系

    项目的依赖关系主要分为三种:依赖,继承,聚合 依赖关系 依赖关系是最常用的一种,就是你的项目需要依赖其他项目,比如...

  • 9. 依赖关系

    转载地址 项目的依赖关系主要分为三种:依赖,继承,聚合 依赖关系 依赖关系是最常用的一种,就是你的项目需要依赖其他...

  • UML图的基础

    一、 基础关系 依赖关系依赖关系 实现关系实现关系 继承关系继承关系 组合关系组合关系 聚合关系聚合关系 关联关系...

网友评论

      本文标题:Spark-RDD的依赖关系

      本文链接:https://www.haomeiwen.com/subject/fibgqktx.html