8.4.2 ResultTask执行结果与Driver的交互原理及源码详解
Task的run方法调用的时候会导致Task的抽象方法runTask的调用, Task.scala的runTask方法是一个抽象方法。Task包括2种Task:ResultTask、ShuffleMapTask,抽象runTask方法具体的实现由子类的runTask实现。ResultTask的runTask具体实现源码如下。
ResultTask.scala的runTask源码:
1. override def runTask(context: TaskContext): U= {
2. ……
3. //反序列RDD和func处理函数
4. val(rdd, func) = ser.deserialize[(RDD[T], (TaskContext, Iterator[T]) => U)](
5. ……
6. func(context, rdd.iterator(partition,context))
7. }
而ResultTask的runTask方法中反序列化生成func函数,最后通过func函数计算出最终的结果。
ResultTask执行结果与Driver的交互过程同ShuffleMapTask类似,最终DAGScheduler.handleTaskCompletion中task执行结果,根据ShuffleMapTask和ResultTask两种情况分别处理。其中ResultTask的处理结果如下。
DAGScheduler的handleTaskCompletion源码:
1. casert: ResultTask[_, _] =>
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?