RDD源码的count方法:

从上面代码可以看出来,count方法触发SparkContext的runJob方法的调用:

进入 runJob(rdd, func, 0 until rdd.partitions.size, false)方法:

进一步跟踪runJob(rdd, (context: TaskContext, iter: Iterator[T]) => func(iter), partitions, allowLocal)方法:

继续跟踪进入runJob[T, U](rdd, func, partitions, allowLocal, (index, res) => results(index) = res)方法:

代码分析:

1、getCallSite :

2、clean(func):

3、dagScheduler.runJob(rdd, cleanedFunc, partitions, callSite, allowLocal, resultHandler, localProperties.get):

代码分析:

3.1、进入submitJob(rdd, func, partitions, callSite, allowLocal, resultHandler, properties):

上面代码分析:

3.1.1、 进入new JobWaiter(this, jobId, partitions.size, resultHandler)方法

3.1.2、进入eventProcessActor ! JobSubmitted( jobId, rdd, func2, partitions.toArray, allowLocal, callSite, waiter, properties)方法

我们可以看出来,是给自己发消息的

3.1.3、进入  dagScheduler.handleJobSubmitted(jobId, rdd, func, partitions, allowLocal, callSite,listener, properties)方法

首先构建finalStage,然后又一个getMissingParentsStages方法,可以发现运行有本地运行和集群运行两种模式,本地运行主要用于本地实验和调试:

3.1.3.1、进入  finalStage = newStage(finalRDD, partitions.size, None, jobId, callSite)方法:

3.1.3.2、进入 runLocally(job)方法:

3.1.3.2.1、 runLocallyWithinThread(job)方法:

3.1.3.3、进入 submitStage(finalStage)方法:

上面代码分析:submitStage第一次传入的参数是Job的最后一个Stage,然后判断一下是否缺失父Stage,如果没有依赖的parent Stage的话就可以submitMissingTasks运行,如果有parent Stage的话就要再一次submitStage做递归操作,最终会导致submitMissingTasks的调用:

3.1.3.3.1、进入  activeJobForStage(stage) 方法:

3.1.3.3.2、进入  getMissingParentStages(stage).sortBy(_.id) 方法:

跟进getShuffleMapState方法:

进入registerShuffleDependencies方法:

3.1.3.3.3、进入submitMissingTasks(stage, jobId.get) 方法:

PS:分析代码太多,下篇继续分析源码

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/stark-summer/p/4829813.html

spark内核揭秘-09-RDD的count操作 触发Job全生命周期-01相关推荐

  1. 第10课:Spark Streaming源码解读之流数据不断接收全生命周期彻底研究和思考

    特别说明:  在上一遍文章中有详细的叙述Receiver启动的过程,如果不清楚的朋友,请您查看上一篇博客,这里我们就基于上篇的结论,继续往下说. 博文的目标是:  Spark Streaming在接收 ...

  2. Spark键值对RDD的转化操作

    1.1  键值对RDD的转化操作\\ 1.1.1  转化操作列表 针对一个Pair RDD的转化操作 : . 针对两个Pair RDD的转化操作 : 转载于:https://www.cnblogs.c ...

  3. spark内核回顾思考 RDD

    2019独角兽企业重金招聘Python工程师标准>>> Spark core思考 Spark上的子框架,都是后来加上去的.都是在Spark core之上完成的,所有框架一切的实现最终 ...

  4. spark内核揭秘-14-Spark性能优化的10大问题及其解决方案

    问题1:reduce task数目不合适 解决方案: 需要根据实际情况调整默认配置,调整方式是修改参数spark.default.parallelism.通常的,reduce数目设置为core数目的2 ...

  5. spark内核揭秘-02-spark集群概览

    2019独角兽企业重金招聘Python工程师标准>>> Spark集群预览: 官方文档对spark集群的初步描述如下,这是一个典型的主从结构: 官方文档对spark集群中的一些关键点 ...

  6. spark内核揭秘-06-TaskSceduler启动源码解析初体验

    TaskScheduler实例对象启动源代码如下所示: 从上面代码可以看出来,taskScheduler的启动是在SparkContext 找到TaskSchedulerImpl实现类中的start方 ...

  7. python如何在所有线程结束后执行最后操作_Python线程的生命周期

    在线程的生命周期中,从创建到执行以及最终终止,线程通常处于四种状态之一:开始态.可调度状态.阻塞态和终止态. 父线程和子线程 当一个新的进程或程序开始运行时,它将以一个线程开始,这个线程被称为主线程. ...

  8. 揭秘阿里云IoT安全平台Link Security如何实现物联网产品全生命周期管理

      全世界99%的物体尚未联网,一场由物联网(IoT)技术引发的"万物智联"革命正在加速到来.但是随之而来的物联网安全问题,也显得非常重要.这里既包括物联网终端的安全,也包括物联网 ...

  9. Uni-app的学习Ⅲ(事件、生命周期、上下拉刷新、网络请求、数据缓存、图片操作、条件注释)

    一.事件 事件绑定 在uni中事件绑定和vue中是一样的,通过v-on进行事件的绑定,也可以简写为@ <button @click="tapHandle">点我啊< ...

最新文章

  1. 旧文重发:做人、做事,做架构师——架构师能力模型解析
  2. 关掉windows自动更新
  3. 编程科普|你知道的关于 Python 的那些知识,可能全错了!
  4. 使用 SAP Fiori Tools 部署 SAP UI5 应用到 ABAP 服务器时遇到的各种错误和解决办法
  5. update语句中使用子查询
  6. es6 --- 模块
  7. 算力云服务器是干啥的,云服务器将成趋势计算力和安全性是考验
  8. sigquit信号默认忽略吗_老妹儿,你真的搞懂了 Shell 信号吗?
  9. php 项目中引用对方接口_关于PHP中为什么要写接口的问题说明
  10. maple 2018 窗口关闭提示乱码_iPhone最废柴却无法关闭的俩功能,我终于屏蔽了!...
  11. [debug] 开源项目的本地使用:使用pip安装的函数库不能被anaconda和pycharm使用+visdom使用 +路径问题
  12. [转载] Python字符串操作大全(一)
  13. 汽车故障诊断技术【11】
  14. linux系统上安装微信(Ubuntu/Debian 微信安装)
  15. redis查看集合中元素的数量,scard
  16. vue给html动态添加属性,Vue中怎么动态添加类名?
  17. python:select interpreter resulted in an error python.setINterpreter not found
  18. IBM_System_x3650服务器固件升级手顺
  19. gen阻抗 pcie_PCIe Gen3/Gen4接收端链路均衡测试(上篇:理论篇)
  20. 阿里云营收破百亿很牛?和AWS等全球头部厂商还差太多!

热门文章

  1. pagefooter如何不占位置_小卫生间如何装修?照着小浴室装修效果图这样装
  2. 【测评】海康EliteX---全球首款USB4.0移动固态硬盘,硬盘黑科技,移动闪电侠
  3. a类论文 计算机视觉,【科研新进展】(21)我校教师首次在计算机视觉领域A类会议上发表论文...
  4. java ftp 中文上传_java实现ftp文件上传下载,解决慢,中文乱码,多个文件下载等问题...
  5. python3.x版本的保留字总数是多少_Python3.6.5版本的保留字总数是:()-智慧树大数据分析的python基础章节答案...
  6. python学习-异常(异常类型,异常处理、自定义异常)
  7. c语言af-1,单反对焦模式中的AF-S、AF-C、AF-A是什么意思,
  8. arcgis使用工具箱导出dbf_ArcGIS——好好的属性表,咋就乱码了呢?
  9. 未来十年,Java 仍会是最受欢迎的编程语言吗?
  10. 别再叫我“老工”!!!工程师姓什么很重要!