RDD依赖关系

1. RDD血缘关系

​ RDD只支持粗粒度转换,即在大量记录上执行的单个操作。将创建RDD的一系列Lineage(血统)记录下来,以便恢复丢失的分区。RDD的Lineage会记录RDD的元数据信息和转换行为,当该RDD的部分分区数据丢失时,它可以根据这些信息来重新运算和恢复丢失的数据分区。

查看RDD的血缘方法:rdd.toDebugString

示例

/**
* @description: RDD血缘依赖
* @author: HaoWu
* @create: 2020年08月04日
*/
object DependeciedTest {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("RDDTest").setMaster("local[*]")
val sc = new SparkContext(conf)
val rdd1 = sc.makeRDD(List(1, 2, 3, 4)).map(x => x)
println(rdd1.toDebugString)
println("----------------------")
val rdd2 = rdd1.map(x=>x)
println(rdd2.toDebugString)
println("----------------------")
val rdd3 = rdd2.groupBy(x=>x)
println(rdd3.toDebugString)
println("----------------------")
rdd3.collect()
}
}

结果

(8) MapPartitionsRDD[1] at map at DependeciedTest.scala:15 []
| ParallelCollectionRDD[0] at makeRDD at DependeciedTest.scala:15 []
----------------------
(8) MapPartitionsRDD[2] at map at DependeciedTest.scala:18 []
| MapPartitionsRDD[1] at map at DependeciedTest.scala:15 []
| ParallelCollectionRDD[0] at makeRDD at DependeciedTest.scala:15 []
----------------------
(8) ShuffledRDD[4] at groupBy at DependeciedTest.scala:21 []
+-(8) MapPartitionsRDD[3] at groupBy at DependeciedTest.scala:21 []
| MapPartitionsRDD[2] at map at DependeciedTest.scala:18 []
| MapPartitionsRDD[1] at map at DependeciedTest.scala:15 []
| ParallelCollectionRDD[0] at makeRDD at DependeciedTest.scala:15 []
----------------------

2. 依赖关系

依赖关系: 当前RDD和和父RDD之间的依赖关系

查看依赖关系方法:rdd.dependencies

示例

/**
* @description: RDD依赖关系
* @author: HaoWu
* @create: 2020年08月04日
*/
object DependeciedTest {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("RDDTest").setMaster("local[*]")
val sc = new SparkContext(conf)
val rdd1 = sc.makeRDD(List(1, 2, 3, 4))
println(rdd1.dependencies)
println("----------------------")
val rdd2 = rdd1.map(x=>x)
println(rdd2.dependencies)
println("----------------------")
val rdd3 = rdd2.groupBy(x=>x)
println(rdd3.dependencies)
println("----------------------")
rdd3.collect()
}
}

结果

//不依赖于任何RDD
List()
----------------------
// 1对1(1父1子)依赖 (窄依赖),窄依赖不会划分Stage
List(org.apache.spark.OneToOneDependency@1eaf1e62)
----------------------
//1对N(1父多子)依赖(宽依赖或shuffle依赖),宽依赖会划分Stage
List(org.apache.spark.ShuffleDependency@5fad41be)
----------------------

3. RDD的宽窄依赖

  • 窄依赖 (NarrowDependency)

    每一个父RDD的Partition只能被子RDD的一个Partition使用,窄依赖我们形象的比喻为独生子女。

  • 宽依赖 (ShuffleDependency)

    同一个父RDD的Partition被多个子RDD的Partition依赖,会引起Shuffle,宽依赖我们形象的比喻为多生。

4.任务划分

RDD任务切分中间分为:Application、Job、Stage和Task

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

  2. Job:一个Action算子就会生成一个Job;

  3. Stage:Stage等于宽依赖(ShuffleDependency)的个数加1;

  4. Task:一个Stage阶段中,最后一个RDD的分区个数就是Task的个数。

注意:Application->Job->Stage->Task每一层都是1对n的关系。

Spark(六)【RDD的血缘依赖】的更多相关文章

  1. Spark核心RDD、什么是RDD、RDD的属性、创建RDD、RDD的依赖以及缓存、

    1:什么是Spark的RDD??? RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变.可分区.里面的元素可并行 ...

  2. Spark之RDD依赖关系及DAG逻辑视图

    RDD依赖关系为成两种:窄依赖(Narrow Dependency).宽依赖(Shuffle Dependency).窄依赖表示每个父RDD中的Partition最多被子RDD的一个Partition ...

  3. 【Spark】RDD的依赖关系和缓存相关知识点

    文章目录 RDD的依赖关系 宽依赖 窄依赖 血统 RDD缓存 概述 缓存方式 RDD的依赖关系 RDD和它依赖的父RDD的关系有两种不同的类型,即窄依赖(narrow dependency) 和宽依赖 ...

  4. Spark核心—RDD初探

    本文目的     最近在使用Spark进行数据清理的相关工作,初次使用Spark时,遇到了一些挑(da)战(ken).感觉需要记录点什么,才对得起自己.下面的内容主要是关于Spark核心-RDD的相关 ...

  5. Spark之RDD本质

    1.在一个完整的数据转换流程里往往涉及到多个具有衍生关系RDD,这些RDD其实是通过逻辑串联来利用装饰器模式层层包装扩展的的一堆对象,这些相邻RDD间必须有继承关系.并且比Java中的装饰器来的更彻底 ...

  6. 【Spark】RDD(Resilient Distributed Dataset)究竟是什么?

    目录 基本概念 官方文档 概述 含义 RDD出现的原因 五大属性 以单词统计为例,一张图熟悉RDD当中的五大属性 解构图 RDD弹性 RDD特点 分区 只读 依赖 缓存 checkpoint 基本概念 ...

  7. Spark核心——RDD

    Spark中最核心的概念为RDD(Resilient Distributed DataSets)中文为:弹性分布式数据集,RDD为对分布式内存对象的 抽象它表示一个被分区不可变且能并行操作的数据集:R ...

  8. 关于Spark中RDD的设计的一些分析

    RDD, Resilient Distributed Dataset,弹性分布式数据集, 是Spark的核心概念. 对于RDD的原理性的知识,可以参阅Resilient Distributed Dat ...

  9. spark中RDD的转化操作和行动操作

    本文主要是讲解spark里RDD的基础操作.RDD是spark特有的数据模型,谈到RDD就会提到什么弹性分布式数据集,什么有向无环图,本文暂时不去展开这些高深概念,在阅读本文时候,大家可以就把RDD当 ...

随机推荐

  1. 矩形覆盖 牛客网 剑指Offer

    矩形覆盖 牛客网 剑指Offer 题目描述 我们可以用21的小矩形横着或者竖着去覆盖更大的矩形.请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? class Solution: ...

  2. Codeforces Round #736 (Div. 2)

    A,B,C就不说了,又被D题卡住了..... 感觉怎么说呢,就是题解中的三个提示都已经想到了,就是不知道该怎么解决.... D. Integers Have Friends 简述题意:题目要求你找一个 ...

  3. hdu 5090 Game with Pearls (额,, 想法题吧 / 二分图最大匹配也可做)

    题意: 给你N个数,a1,,,,an.代表第i个管子里有ai个珍珠. 规定只能往每根管里增加k的倍数个珍珠. 如果存在一套操作,操作完毕后可以得到1~N的一个排列,则Jerry赢,否则Tom赢. 问谁 ...

  4. Vue面试题01

    说出vue常用的指令: v-text,  v-html,  v-bind,  v-for,  v-if,  v-else,  v-else-if,   v-show,    v-on, 谈谈你对MVC ...

  5. "迷途"的野指针,都快找不着北了

    指针,C语言开发者表示很淦,指针的使用,很多人表示不敢直面ta,不像Java一样,有垃圾自动回收功能,我们不用担心那么多内存泄漏等问题,那C语言里边呢,指针又分为了"野指针",&q ...

  6. loadRunner12 设置关联 获取服务端动态数据

    关联:服务器返回给客户端一些动态变化的值,客户端用这些值去访问服务器,不能把这些值写死在脚本里面,而应该存放在一个变量里面. 在脚本回放过程中,客户端发出请求,通过关联函数所定义的左右边界值(也就是关 ...

  7. 菜鸡的Java笔记 第二十四 - java 接口的基本定义

    1.接口的基本定义以及使用形式        2.与接口有关的设计模式的初步认识        3.接口与抽象类的区别                 接口与抽象类相比,接口的使用几率是最高的,所有的 ...

  8. 100_第一个vue-cli项目

    目录 什么是vue-cli 主要的功能 需要的环境 Node.js : http://nodejs.cn/download/ Git : https://git-scm.com/downloads 安 ...

  9. 4、使用SetOperations(无序)操作redis(Set集合)

    文章来源:https://www.cnblogs.com/shiguotao-com/p/10560599.html 方法 c参数 s说明 Long add(K key, V... values); ...

  10. 设计模式学习-使用go实现访问者模式

    访问者模式 定义 优点 缺点 适用范围 代码实现 什么是 Double Dispatch 参考 访问者模式 定义 访问者模式(Visitor):表示一个作用于某对象结构中的各元素的操作.它使你可以在不 ...