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. undefined reference to `recvIpcMsg(int, ipc_msg*)'——#ifdef __cplusplus extern "C" { #endif

    最近在弄一个进程间通信,原始测试demon用c语言写的,经过测试ok,然后把接口封装起来了一个send,一个recv. 使用的时候send端是在一个c语言写的http服务端使用,编译ok没有报错,但是 ...

  2. Docker安装配置Tomcat

    1.使用docker pull tomcat下载镜像(不加tag则是下载最新版本) 2.运行容器(-d 后台运行:-p 指定端口映射),接的是镜像ID 3.进入容器执行命令,接的是容器ID 4.宿主机 ...

  3. LOTO示波器配合VI曲线测试仪在电路板维修中的应用

    LOTO示波器配合VI曲线测试仪在电路板维修中的应用 市面上的VI曲线测试仪价格都在2000元到万元不等,同时大多携带不方便,有个别产品可以携带,但是功能单一(比如无法保存曲线,对比曲线等),那么LO ...

  4. 安装RedHat和Centos后做的15件事情

    由于之前的Centos 7不支持无线网络连接,我尝试着将内核升级至4.8还是无效,遂决定换回RedHat 7,目前系统已经安装好,版本是Red Hat Enterprise Linux 7.3,下面是 ...

  5. 从0到1使用Kubernetes系列(六):数据持久化实战

    本文是从 0 到 1 使用 Kubernetes 系列第六篇,上一篇<从 0 到 1 使用 Kubernetes 系列(五):Kubernetes Scheduling>介绍了 Kuber ...

  6. #web开发# 知道cookie hostonly属性的请举手。

    Cookie常见姿势.疑难梳理 目前w3c定义浏览器存放每个cookie需要包含以下字段: cookie属性 基本描述 举例 备注 name=value cookie键值对 id=a3fWa expi ...

  7. Linux usb 4. Device 详解

    文章目录 1. 简介 2. Platform Layer 2.1 Platform Device 2.2 Platform Driver 3. UDC/Gadget Layer 3.1 Gadget ...

  8. 2021广东省强网杯WriteUp

    个人赛 网络诈骗 参考 https://github.com/Heyxk/notes/issues/1 先把EnMicroMsg.db提出来 CompatibleInfo.cfg是0kb,用第一种方法 ...

  9. Spring Cache 带你飞(二)

    接着上一篇讲了 Spring Cache 如何被 Spring Aop 代理加载对应的代码,以及何如注入相关界面逻辑. Spring Cache 带你飞(一) 本篇我们围绕两个要点展开: 一个数据是如 ...

  10. [luogu7092]计数题

    由于$\mu(i)$,因此每一个素数最多存在1次,当$k=0$答案必然为0 根据莫比乌斯和欧拉函数的积性,答案与对素数的划分无关,仅与每一个素数是否出现有关,换言之枚举素数出现的集合$P'$,答案即为 ...