spark内核揭秘-09-RDD的count操作 触发Job全生命周期-01
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相关推荐
- 第10课:Spark Streaming源码解读之流数据不断接收全生命周期彻底研究和思考
特别说明: 在上一遍文章中有详细的叙述Receiver启动的过程,如果不清楚的朋友,请您查看上一篇博客,这里我们就基于上篇的结论,继续往下说. 博文的目标是: Spark Streaming在接收 ...
- Spark键值对RDD的转化操作
1.1 键值对RDD的转化操作\\ 1.1.1 转化操作列表 针对一个Pair RDD的转化操作 : . 针对两个Pair RDD的转化操作 : 转载于:https://www.cnblogs.c ...
- spark内核回顾思考 RDD
2019独角兽企业重金招聘Python工程师标准>>> Spark core思考 Spark上的子框架,都是后来加上去的.都是在Spark core之上完成的,所有框架一切的实现最终 ...
- spark内核揭秘-14-Spark性能优化的10大问题及其解决方案
问题1:reduce task数目不合适 解决方案: 需要根据实际情况调整默认配置,调整方式是修改参数spark.default.parallelism.通常的,reduce数目设置为core数目的2 ...
- spark内核揭秘-02-spark集群概览
2019独角兽企业重金招聘Python工程师标准>>> Spark集群预览: 官方文档对spark集群的初步描述如下,这是一个典型的主从结构: 官方文档对spark集群中的一些关键点 ...
- spark内核揭秘-06-TaskSceduler启动源码解析初体验
TaskScheduler实例对象启动源代码如下所示: 从上面代码可以看出来,taskScheduler的启动是在SparkContext 找到TaskSchedulerImpl实现类中的start方 ...
- python如何在所有线程结束后执行最后操作_Python线程的生命周期
在线程的生命周期中,从创建到执行以及最终终止,线程通常处于四种状态之一:开始态.可调度状态.阻塞态和终止态. 父线程和子线程 当一个新的进程或程序开始运行时,它将以一个线程开始,这个线程被称为主线程. ...
- 揭秘阿里云IoT安全平台Link Security如何实现物联网产品全生命周期管理
全世界99%的物体尚未联网,一场由物联网(IoT)技术引发的"万物智联"革命正在加速到来.但是随之而来的物联网安全问题,也显得非常重要.这里既包括物联网终端的安全,也包括物联网 ...
- Uni-app的学习Ⅲ(事件、生命周期、上下拉刷新、网络请求、数据缓存、图片操作、条件注释)
一.事件 事件绑定 在uni中事件绑定和vue中是一样的,通过v-on进行事件的绑定,也可以简写为@ <button @click="tapHandle">点我啊< ...
最新文章
- 旧文重发:做人、做事,做架构师——架构师能力模型解析
- 关掉windows自动更新
- 编程科普|你知道的关于 Python 的那些知识,可能全错了!
- 使用 SAP Fiori Tools 部署 SAP UI5 应用到 ABAP 服务器时遇到的各种错误和解决办法
- update语句中使用子查询
- es6 --- 模块
- 算力云服务器是干啥的,云服务器将成趋势计算力和安全性是考验
- sigquit信号默认忽略吗_老妹儿,你真的搞懂了 Shell 信号吗?
- php 项目中引用对方接口_关于PHP中为什么要写接口的问题说明
- maple 2018 窗口关闭提示乱码_iPhone最废柴却无法关闭的俩功能,我终于屏蔽了!...
- [debug] 开源项目的本地使用:使用pip安装的函数库不能被anaconda和pycharm使用+visdom使用 +路径问题
- [转载] Python字符串操作大全(一)
- 汽车故障诊断技术【11】
- linux系统上安装微信(Ubuntu/Debian 微信安装)
- redis查看集合中元素的数量,scard
- vue给html动态添加属性,Vue中怎么动态添加类名?
- python:select interpreter resulted in an error python.setINterpreter not found
- IBM_System_x3650服务器固件升级手顺
- gen阻抗 pcie_PCIe Gen3/Gen4接收端链路均衡测试(上篇:理论篇)
- 阿里云营收破百亿很牛?和AWS等全球头部厂商还差太多!
热门文章
- pagefooter如何不占位置_小卫生间如何装修?照着小浴室装修效果图这样装
- 【测评】海康EliteX---全球首款USB4.0移动固态硬盘,硬盘黑科技,移动闪电侠
- a类论文 计算机视觉,【科研新进展】(21)我校教师首次在计算机视觉领域A类会议上发表论文...
- java ftp 中文上传_java实现ftp文件上传下载,解决慢,中文乱码,多个文件下载等问题...
- python3.x版本的保留字总数是多少_Python3.6.5版本的保留字总数是:()-智慧树大数据分析的python基础章节答案...
- python学习-异常(异常类型,异常处理、自定义异常)
- c语言af-1,单反对焦模式中的AF-S、AF-C、AF-A是什么意思,
- arcgis使用工具箱导出dbf_ArcGIS——好好的属性表,咋就乱码了呢?
- 未来十年,Java 仍会是最受欢迎的编程语言吗?
- 别再叫我“老工”!!!工程师姓什么很重要!