Spark中RDD的依赖和DAG的生成

1、RDD之间的依赖类型

窄依赖(NorrawDependency)

父RDD的一个分区的数据,是给到子rdd的一个分区使用,这种依赖关系就是窄依赖。窄依赖指的是父RDD的一个分区,被子RDD的一个分区所依赖(一对一)。

map,flatMap,filter 都是窄依赖,union 也是窄依赖。

分为宽依赖(WideDependency)

父RDD的一个分区的数据,是给到子rdd的多个分区使用,那么就是宽依赖。

一旦有宽依赖,在这里会发生数据的shuffle,会切分stage(阶段)。

sortBy,reduceByKey,aggregate都是宽依赖

注意:

某些特殊的算子如join,默认情况下,是宽依赖。但是在特殊情况下,join是一个窄依赖。

俩个条件:1分区数量一致 2根据key的reduceByKey或groupBykey等算子计算后进行join。

join得到的分区数量,以左右两边rdd的分区数量的最大值为准。

2、DAG的生成

DAG:有向无环图。

方向:RDD的依赖关系,有父子关系。

无环:从读取hdfs开始,到写入到hdfs上,没有闭环。

图:点+边

点:RDD

边:表示rdd的依赖关系

stage的划分:

Spark任务会根据RDD之间的依赖关系,形成一个DAG有向无环图,DAG会提交给DAGScheduler,DAGScheduler会把DAG划分相互依赖的多个stage,划分stage的依据就是RDD之间的宽窄依赖。遇到一个宽依赖就划分一个stage,每个stage包含一个或多个task任务。然后将这些task以taskSet的形式提交给TaskScheduler运行。
stage的个数=宽依赖的个数+1

注意:

stage中的并行度由一个Stage中finalRDD(最后一个RDD)中的partition的个数决定。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值