Spark(六)【RDD的血缘依赖】
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
Application:初始化一个SparkContext即生成一个Application;
Job:一个Action算子就会生成一个Job;
Stage:Stage等于宽依赖(ShuffleDependency)的个数加1;
Task:一个Stage阶段中,最后一个RDD的分区个数就是Task的个数。
注意:Application->Job->Stage->Task每一层都是1对n的关系。
Spark(六)【RDD的血缘依赖】的更多相关文章
- Spark核心RDD、什么是RDD、RDD的属性、创建RDD、RDD的依赖以及缓存、
1:什么是Spark的RDD??? RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变.可分区.里面的元素可并行 ...
- Spark之RDD依赖关系及DAG逻辑视图
RDD依赖关系为成两种:窄依赖(Narrow Dependency).宽依赖(Shuffle Dependency).窄依赖表示每个父RDD中的Partition最多被子RDD的一个Partition ...
- 【Spark】RDD的依赖关系和缓存相关知识点
文章目录 RDD的依赖关系 宽依赖 窄依赖 血统 RDD缓存 概述 缓存方式 RDD的依赖关系 RDD和它依赖的父RDD的关系有两种不同的类型,即窄依赖(narrow dependency) 和宽依赖 ...
- Spark核心—RDD初探
本文目的 最近在使用Spark进行数据清理的相关工作,初次使用Spark时,遇到了一些挑(da)战(ken).感觉需要记录点什么,才对得起自己.下面的内容主要是关于Spark核心-RDD的相关 ...
- Spark之RDD本质
1.在一个完整的数据转换流程里往往涉及到多个具有衍生关系RDD,这些RDD其实是通过逻辑串联来利用装饰器模式层层包装扩展的的一堆对象,这些相邻RDD间必须有继承关系.并且比Java中的装饰器来的更彻底 ...
- 【Spark】RDD(Resilient Distributed Dataset)究竟是什么?
目录 基本概念 官方文档 概述 含义 RDD出现的原因 五大属性 以单词统计为例,一张图熟悉RDD当中的五大属性 解构图 RDD弹性 RDD特点 分区 只读 依赖 缓存 checkpoint 基本概念 ...
- Spark核心——RDD
Spark中最核心的概念为RDD(Resilient Distributed DataSets)中文为:弹性分布式数据集,RDD为对分布式内存对象的 抽象它表示一个被分区不可变且能并行操作的数据集:R ...
- 关于Spark中RDD的设计的一些分析
RDD, Resilient Distributed Dataset,弹性分布式数据集, 是Spark的核心概念. 对于RDD的原理性的知识,可以参阅Resilient Distributed Dat ...
- spark中RDD的转化操作和行动操作
本文主要是讲解spark里RDD的基础操作.RDD是spark特有的数据模型,谈到RDD就会提到什么弹性分布式数据集,什么有向无环图,本文暂时不去展开这些高深概念,在阅读本文时候,大家可以就把RDD当 ...
随机推荐
- tarjan知识点梳理
tarjan在图论中还是挺重要的.这里就简要的梳理一下tarjan的知识点. tarjan算法与无向图连通性. 首先说一下图中割点和桥的定义. 桥:也称割边,定义类似,在无向图中,若去掉某条边,导致整 ...
- hdu 2795 Billboard(单点更新,区间查询)
题意: h*w的白板. 有n个广告牌,每个广告牌是1*wi.必须放置在白板的upmost中的leftmost. 输出n个广告牌放置在第几行.如果放不下,输出-1. 数据规格: h, w, and n ...
- python教程-(四)当索引行不通时(python字典)
一.创建和使用字典 1.函数dict #字典表示方式如下 >>> phonebook = {'tom':'18616271234',"Jim":"186 ...
- mongoDB 的一般使用
理解 mongodb 也是nosql 的一种.他的数据存储类型是一种和json格式比较像的数据类型,可以看作就是json. mongodb 里的数据库都是一个单独的库.一般需要用的库都会设置自己的us ...
- yum Multilib version problems
这两天在更新CentOS7系统时,出现了Multilib version problems错误,执行命令: # yum update 出现了的错误信息: .... ---> Package li ...
- Vue 基础自查——watch、computed和methods的区别
1 前言 创建一个Vue实例时,可以传入一个选项对象 const vm = new Vue({ data: { msg: 'hello' }, computed: {}, methods: {}, w ...
- spark搭建
1.上传解压,配置环境变量 配置bin目录 2.修改配置文件 conf cp spark-env.sh.template spark-env.sh 增加配置 export SPARK_MASTER_I ...
- mysql登录遇到ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
执行mysql -uroot -p,出现如下问题 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using pass ...
- 解读Java8的Thread源码
1.创建的一个无参的Thread对象,默认会有一个线程名,以Thread-开头,从0开始计数,采用了一个static修饰的int变量,当对象初始化一次时一直存放在jvm方法区中 2.构造Thread的 ...
- 纯前端实现词云展示+附微博热搜词云Demo代码
前言 最近工作中做了几个数据可视化大屏项目,其中也有用到了词云展示,以前做词云都是用python库来生成图片显示的,这次用了纯前端的实现(Ctrl+V真好用),同时顺手做个微博热搜的词云然后记录一下~ ...