Stage的划分

Stage的划分,第1张

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

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5688768.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存