`

SPARK 宽依赖 和窄依赖 transfer action lazy策略之间的关系

 
阅读更多

 

下面这段在网上拷贝的

 

宽依赖 和窄依赖   说明该操作是 是否有shuffler 操作   成长(lineage )的来源    

 

 

最有趣的部分是DAGScheduler。下面详解它的工作过程。RDD的数据结构里很重要的一个域是对父RDD的依赖。如图3所示,有两类依赖:窄(Narrow)依赖和宽(Wide)依赖。

 

 

图3 窄依赖和宽依赖

窄依赖指父RDD的每一个分区最多被一个子RDD的分区所用,表现为一个父RDD的分区对应于一个子RDD的分区,和两个父RDD的分区对应于一个子RDD 的分区。图3中,map/filter和union属于第一类,对输入进行协同划分(co-partitioned)的join属于第二类。

宽依赖指子RDD的分区依赖于父RDD的所有分区,这是因为shuffle类操作,如图3中的groupByKey和未经协同划分的join。

窄依赖对优化很有利。逻辑上,每个RDD的算子都是一个fork/join(此join非上文的join算子,而是指同步多个并行任务的barrier): 把计算fork到每个分区,算完后join,然后fork/join下一个RDD的算子。如果直接翻译到物理实现,是很不经济的:一是每一个RDD(即使 是中间结果)都需要物化到内存或存储中,费时费空间;二是join作为全局的barrier,是很昂贵的,会被最慢的那个节点拖死。如果子RDD的分区到 父RDD的分区是窄依赖,就可以实施经典的fusion优化,把两个fork/join合为一个;如果连续的变换算子序列都是窄依赖,就可以把很多个 fork/join并为一个,不但减少了大量的全局barrier,而且无需物化很多中间结果RDD,这将极大地提升性能。Spark把这个叫做流水线 (pipeline)优化。

 

 

transfer  action    设计来源是    lazy evaluation  另外 scala 空间和rrd 空间的限制

 

这里有两个设计要点。首先是lazy evaluation。熟悉编译的都知道,编译器能看到的scope越大,优化的机会就越多。Spark虽然没有编译,但调度器实际上对DAG做了线性复 杂度的优化。尤其是当Spark上面有多种计算范式混合时,调度器可以打破不同范式代码的边界进行全局调度和优化。下面的例子中把Shark的SQL代码 和Spark的机器学习代码混在了一起。各部分代码翻译到底层RDD后,融合成一个大的DAG,这样可以获得更多的全局优化机会。

 

另一个要点是一旦行动算子产生原生数据,就必须退出RDD空间。因为目前Spark只能够跟踪RDD的计算,原生数据的计算对它来说是不可见的(除非以后 Spark会提供原生数据类型操作的重载、wrapper或implicit conversion)。这部分不可见的代码可能引入前后RDD之间的依赖,如下面的代码:

 

 

 

 这里容易受到mr 模型的理解限制,直观上以为要shuffer 了就一定要执行,但实际是只有 action 方法 (要输出到rdd 以外的域(输出不是rdd) ,和要不要shuffer,要不要reduce没有关系,这里ACTION 的方法的reduce 和MR reduce 不是同一个东西   )才会导致提交作业并执行。

 

 

 

  • 大小: 132 KB
分享到:
评论

相关推荐

    hibernate在集合上的lazy策略

    博文链接:https://llying.iteye.com/blog/221700

    Lazy

    Lazy

    mybatis中延迟加载Lazy策略的方法

    主要介绍了mybatis中延迟加载Lazy策略,需要的朋友可以参考下

    dagger-lazy-cycle:dagger2 中使用 Lazy 支持循环依赖的提案

    dagger2 中使用Lazy或Provider支持循环依赖的建议 Dagger 2.0 目前不支持任何类型的依赖循环。 Dagger 1 允许使用Lazy或Provider依赖包装器。 这里开始了一个问题: : 我已经开始使用在上述问题中发现的示例代码来...

    hibernate的lazy策略forClass

    博文链接:https://llying.iteye.com/blog/221699

    Big Data Processing Using Spark in Cloud 2018

    The book mainly focuses on the in-depth architecture of Spark and our understanding of Spark RDDs and how RDD complements big data’s immutable nature, and solves it with lazy evaluation, cacheable ...

    spark集群安装

    lazy执行的,只有调用了action方法,才正式开始运行。 scala>sc.textFile("hdfs://hdp-01:9000/wordcount/input/").flatMap(_.split(" ")).map((_,1)).reduceByKey(_ + _).sortBy(_._2,false).collect 注意...

    el-tree实现el-transfer(穿梭框)的效果代码(全)

    勾选右侧的已选资源,效果同左侧一样; 2、勾选全选,则资源全部添加到右侧,左侧的则显示为空 ...4、后台给到的数据是:所有的资源(多维数组)和已分配的资源(一维数组,包含(半勾选)父级数据)

    jQuery_lazyload

    jQuery_lazyload插件示例Demo

    Big Data Processing Using Spark in Cloud

    The book mainly focuses on the in-depth architecture of Spark and our understanding of Spark RDDs and how RDD complements big data’s immutable nature, and solves it with lazy evaluation, cacheable ...

    hibernate在单端关联上的lazy策略

    博文链接:https://llying.iteye.com/blog/221701

    前端开源库-lazy-dependable

    前端开源库-lazy-dependable懒惰可靠,通过懒惰依赖解析实现可靠

    lazyload-JavaScript

    lazyload, JavaScript, 图片懒加载, h5

    lazyload延迟加载

    Lazyload是通过延迟加载来实现按需加载,达到节省资源,加快浏览速度的目的。 网上也有不少类似的效果,这个Lazyload主要特点是: 支持使用window(窗口)或元素作为容器对象; 对静态(位置大小不变)元素做了大量...

    Lazy_Theta_star

    Lazy_Theta_star是在 Theta_star上的进一步改进,Theta_star是当节点加入open表时和当前点的父节点进行比较g值是否更小,对一些不必要的节点计算浪费了时间,而Lazy_Theta_star则是在弹出open表后进行比较,减少了...

    Lazyload应用案例

    图片懒加载lazyload,增快页面访问速度。

    LazyUI-dependency

    不习惯用maven的同学可以把依赖的jar下载下来,并加入classpath,去掉pom,将工程修改为一般java工程即可

    Lazy Load Plugin for jQuery demo

    Lazy Load Plugin for jQuery

    lazyload.js演示页面

    lazyload.js可以实现图片分批次加载,不是一次性加载完毕再分批次展现。使用该插件有个注意的地方,图片要加上宽高。因为默认图是1像素的,所以如果没有给图片限制宽高,当滚动条滚动时会全部加载出来。

    lazyload技术内幕

    lazyload技术内幕,当下最流行的图片浏览技术

Global site tag (gtag.js) - Google Analytics