博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
021 RDD的依赖关系,以及造成的stage的划分
阅读量:6695 次
发布时间:2019-06-25

本文共 1455 字,大约阅读时间需要 4 分钟。

一:RDD的依赖关系

1.在代码中观察

  val data = Array(1, 2, 3, 4, 5)

  val distData = sc.parallelize(data)
  val resultRDD = distData.flatMap(v => (1 to v)).map(v => (v%2,1)).reduceByKey(_+_)
  resultRDD.toDebugString ## 查看RDD的依赖情况

  

 

2.解释

  +—处表示,这是两个不同的stage

  同时可以知道shuffledRDD依赖于MapPartitionRDD,MapPartitionRDD依赖于MapPartitionRDD,MapPartitionRDD依赖于ParalleCollectionRDD

  [2]表示有两个分区

  

 

3.RDD依赖  

  lineage: 生命线

  依赖于RDD之间的依赖,后续的RDD数据是从之前的RDD中获取
  由于存在RDD的依赖,当一个后续的RDD执行失败的情况下(某个Task执行失败,eg:数据丢失),可以从父RDD中重新执行
  RDD依赖父RDD,依赖的父RDD可以有多个;

    特例:第一个RDD是没有父RDD的

  RDD的内部是由多个Partiiton构成的,所以RDD的依赖实质上就是RDD中Partition的依赖关系

 

4.依赖的情况

  当前RDD中的每个分区的数据到下一个RDD都对应一个分区

    即:一个分区的数据输出到下一个RDD的时候还是在同一个分区,也就是一对一
  当前RDD中的多个分区的数据到下一个RDD的时候输出到同一个分区,当前RDD的中一个分区的数据到下一个RDD的时候输出到多个分区,也就是多对多

 

5.依赖分类

  窄依赖:

    子RDD中的每个分区的数据都来自于常数个父RDD的分区,而且父RDD每个分区的数据到子RDD的时候一定在一个分区中
    不存在shuffle过程,所有操作在一起进行
  宽依赖:
    子RDD中的每个分区的数据都依赖所有父RDD的所有的分区数据,而且父RDD的每个分区的数据到子RDD的时候不一定在一个分区中
    存在shuffle过程,需要等待上一个RDD的所有Task执行完成

  

  

  注意点:

    join有时候是宽依赖,有时候是窄依赖,这个要看分区数量会不会改变。

 

6.算子与依赖之间的关系

  原本以为Transformation的算子是窄依赖,Action算子是宽依赖。

  现在理解更深了一下,发现他们是两个概念,不要混淆。

 

二:stage的划分

1.Spark Application Job的Stage划分规则

  RDD在调用transformation类型的函数时候形成DAG执行图(RDD的依赖)

  RDD在调用action类型函数的时候会触发job的执行
  在Driver中使用DAGScheduler对DAG图进行Stage的划分
    从DAG图的最后一步(结果输出的那一步)往前推,如果发现API是宽依赖(ShuffledRDD), 就结束推断,将此时构成的DAG图称为一个Stage,然后继续往前推断,直到第一个RDD
    ====> Stage与Stage之间的分割是宽依赖

 

三:两种RDD依赖的复习

1.说明

  主要是添加一个知识点。

  什么情况下父RDD需要执行。

 

2.不是不执行

  

 

转载地址:http://ckvoo.baihongyu.com/

你可能感兴趣的文章
ubuntu install wiznote
查看>>
EF CodeFirst 如何通过配置自动创建数据库<当模型改变时>
查看>>
系统移植的四大步骤
查看>>
页面加载完毕执行多个JS函数
查看>>
js设置全局变量ajax中赋值
查看>>
Eclipse 控制console
查看>>
C#通过属性名称获取(读取)属性值的方法 z
查看>>
【VBA编程】10.自定义集合
查看>>
SQLServer 维护脚本分享(08)临时数据库(tempdb)
查看>>
ServerSocketChannel API用法
查看>>
Javascript判断object还是list/array的类型(包含javascript的数据类型研究)
查看>>
设计模式(二)模板方法模式
查看>>
闰秒导致MySQL服务器的CPU sys过高
查看>>
网络抓包工具 wireshark 入门教程
查看>>
shell 编程每日100行
查看>>
Sublime Text 3新建工程
查看>>
maven GroupId 和ArtifactId的含义
查看>>
Mac下运行git报错"xcrun: error: invalid active developer path .."
查看>>
基于Dubbo框架构建分布式服务
查看>>
css sprite讲解与使用实例
查看>>