栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Stage的划分

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/688256.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号