Stage的划分

宽窄依赖

RDD之间有一系列的依赖关系,依赖关系又分为窄依赖和宽依赖。Spark中的Stage其实就是一组并行的任务,任务是一个个的task 。

  • 宽依赖(Shuffle Dependency)

父RDD与子RDD partition之间的关系是一对多。会有shuffle的产生。父RDD的一个分区的数据去到子RDD的不同分区里面。

  • 窄依赖 (Narrow Dependency)

    父RDD和子RDD partition之间的关系是一对一的。或者父RDD一个partition只对应一个子RDD的partition情况下的父RDD和子RDD partition关系是多对一的。不会有shuffle的产生。父RDD一个分区去到子RDD的一个分区

Stage划分算法原理:遇到一个宽依赖就划分一个stage(数据是否需要重组)

Stage概念:由一组并行的task组成

Task:

Task是在集群上运行的基本单位。一个Task负责处理RDD的一个partition。RDD的多个patition会分别由不同的Task去处理。这些Task的处理逻辑完全是一致的。这一组Task就组成了一个Stage。

stage计算模式

pipeline管道计算模式,pipeline只是一种计算思想,模式。

来一条数据然后计算一条数据,把所有的逻辑走完,然后落地,一个task处理完分区的数据

因此跨过了不同的逻辑的分区,是完全基于内存计算的。

**stage的并行度:**是由stage的最后一个RDD的分区数来决定的 。一般来说,一个partiotion对应一个task,但最后reduce的时候可以手动改变reduce的个数,也就是分区数,即改变了并行度。例如reduceByKey(XXX,3),GroupByKey(4),union由的分区数由前面的相加。

如何提高stage的并行度:reduceBykey(xxx,numpartiotion),join(xxx,numpartiotion)

shuffle与stage

shuffle是对数据重新组合和分配

shuffle 是划分 DAG 中 stage 的标识,同时影响 Spark 执行速度的关键步骤

shuffle 操作是 spark 中最耗时的操作,应尽量避免不必要的 shuffle

窄依赖跟宽依赖的区别是是否发生 shuffle(洗牌) 操作.宽依赖会发生 shuffle 操作.

窄依赖是子 RDD的各个分片(partition)不依赖于其他分片,能够独立计算得到结果;

宽依赖指子 RDD 的各个分片会依赖于父RDD 的多个分片,所以会造成父 RDD 的各个分片在集群中重新分片

// Map: "cat" -> c, cat
val rdd1 = rdd.Map(x => (x.charAt(0), x)) //并行化 
// groupby same key and count
val rdd2 = rdd1.groupBy(x => x._1).
                Map(x => (x._1, x._2.toList.length)) //宽依赖

DAG有向流程图

在这里插入图片描述

参考

https://csguo.blog.csdn.net/article/details/82703723

https://blog.csdn.net/anzhsoft/article/details/38358817

https://csguo.blog.csdn.net/article/details/82704623

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值