设为首页 收藏本站
查看: 1240|回复: 0

[经验分享] 从物理执行角度透视Spark Job(23)

[复制链接]

尚未签到

发表于 2019-1-31 06:05:36 | 显示全部楼层 |阅读模式
    一、再次思考pipeline
       即使采用pipeline的方式,函数f对依赖的RDD中的数据集合的操作也会有两种方式:
     1, f(record),f作用于集合的每一条记录,每次只作用于一条记录;
     2, f(records),f一次性作用于集合的全部数据;
  Spark采用是是第一种方式,原因:
    1, 无需等待,可以最大化的使用集群的计算资源;
    2, 减少OOM的发生;
    3, 最大化的有利于并发;
    4, 可以精准的控制每一Partition本身(Dependency)及其内部的计算(compute);
    5, 基于lineage的算子流动式函数式编程,节省了中间结果的产生,并且可以最快的恢复;

   二:思考Spark Job具体的物理执行
      Spark Application里面可以产生1个或者多个Job,例如spark-shell默认启动的时候内部就没有Job,只是作为资源的分配程序,可以在spark-shell里面写代码产生若干个Job,普通程序中一般而言可以有不同的Action,每一个Action一般也会触发一个Job。
      Spark是MapReduce思想的一种更加精致和高效的实现,MapReduce有很多具体不同的实现,例如HadoopMapReduce基本的计算流程如下:首先是以JVM为对象的并发执行的MapperMappermap的执行会产生输出数据,输出数据会经过Partitioner指定的规则放到Local FileSystem中,然后在经由ShuffleSortAggregate变成Reducer中的reduce的输入,执行reduce产生最终的执行结果;Hadoop MapReduce执行的流程虽然简单,但是过于死板,尤其是在构造复杂算法(迭代)时候非常不利于算法的实现,且执行效率极为低下!
      Spark算法构造和物理执行时最最基本的核心:最大化pipeline
       Pipeline的思想,数据被使用的时候才开始计算,从数据流动的视角来说,是数据流动到计算的位置,实质上从逻辑的角度来看,是算子在数据上流动。
      从算法构建的角度而言:肯定是算子作用于数据,所以是算子在数据上流动;
      从物理执行的角度而言:是数据流动到计算的位置;
      对于pipeline而言,数据计算的位置就是每个stage中的最后RDD。
      由于计算的Lazy特性,导致计算从后往前回溯,形成Computing Chain,导致的结果就是需要首先计算出具体一个Stage内部左侧的RDD中本次计算依赖的Partition
       三:窄依赖的物理执行内幕
      一个Stage内部的RDD都是窄依赖,窄依赖计算本身是逻辑上看是从Stage内部最左侧的RDD开始立即计算的,根据Computing Chain,数据(Record)从一个计算步骤流动到下一个结算步骤,以此类推,直到计算到Stage内部的最后一个RDD来产生计算结果。
      Computing Chain的构建是从后往前回溯构建而成,而实际的物理计算则是让数据从前往后在算子上流动,直到流动到不能再流动位置才开始计算下一个Record。这就导致一个美好的结果:后面的RDD对前面的RDD的依赖虽然是Partition级别的数据集合的依赖,但是并不需要父RDDPartition中所有的Records计算完毕才整体往后流动数据进行计算,这就极大的提高了计算速率!
   四:宽依赖物理执行内幕
      必须等到依赖的父Stage中的最后一个RDD全部数据彻底计算完毕,才能够经过shuffle来计算当前的Stage
  

  


  

  


  


  




  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-669741-1-1.html 上篇帖子: spark启动简单脚本 下篇帖子: Spark1.5.1学习笔记汇总
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表