Spark 任务调度之Executor执行task并返回结果
来源:互联网 发布:w10无法连接到windows 编辑:程序博客网 时间:2024/06/05 15:27
概要
本篇博客是Spark 任务调度概述详细流程中的最后一部分,介绍Executor执行task并返回result给Driver。
receive task
上一篇博客Spark 任务调度之Driver send Task,最后讲到Executor接收Task,如下
Executor的launchTask方法将收到的信息封装为TaskRunner对象,TaskRunner继承自Runnable,Executor使用线程池threadPool调度TaskRunner,如下
接下来查看TaskRunner中run方法对应的逻辑,我将其分为deserialize task、run task、sendback result三部分。
deserialize task
如上图注释,反序列化得到Task对象。
run task
如上图注释,调用Task的run方法执行计算,Task是抽象类,其实现类有两个,ShuffleMapTask和ResultTask,分别对应shuffle和非shuffle任务。
Task的run方法调用其runTask方法执行task,我们以Task的子类ResultTask为例(ShuffleMapTask相比ResultTask多了一个步骤,使用ShuffleWriter将结果写到本地),如下
为了说明上图中的func,我们以RDD的map方法为例,如下
至此,task的计算就完成了,task的run方法返回计算结果。
sendback result
如上图注释,对计算结果进行序列化,再根据其大小采取相应方式处理,最后调用CoarseGrainedExecutorBackend的statusUpdate方法返回result给Driver。
总结
从Executor接收任务,到发送结果给Driver的流程,如下
- 上图①所示路径,执行task任务。
- 上图②所示路径,将执行结果返回给Driver,后续Driver调用TaskScheduler处理返回结果,不再介绍。
- Spark 任务调度之Executor执行task并返回结果
- Spark 任务调度之Launch Executor
- Spark 任务调度之创建Executor
- Spark学习之10:Task执行结果返回流程
- Spark 任务调度之Driver send Task
- 执行器中执行任务并返回结果
- java执行器框架执行任务并返回结果
- 37 Spark之Task执行原理及结果
- 获取Executor提交的并发执行的任务返回结果的两种方式/ExecutorCompletionService使用
- 深入Spark内核:任务调度(4)-Task
- Fork/join框架执行任务并返回结果
- spark源码之Job执行(2)任务调度taskscheduler
- [spark] Task成功执行的结果处理
- 深入浅出之Spark任务调度
- 并发编程--在执行器中执行任务并返回结果
- Java并发编程-17-在执行器中执行任务并返回结果
- SpringMvc自动任务调度之task实现
- Spring之Spring Task任务调度
- 通过字段对List<HashMap<String,Object>>进行分类
- 用gulp压缩js和css
- Linux Kernel 学习笔记2:模块参数
- 【2017/4/13】linux关于如何增加swap大小
- iOS中block块的存储位置&内存管理
- Spark 任务调度之Executor执行task并返回结果
- cd5WHjDyFWcpnNHvtHIbDA==
- SQLite的sqlite_sequence表
- 一起做RGB-D SLAM (6)
- 安利以及orz
- 有关ssh连接linux服务器后在mysql查询后输出中文结果乱码的的问题
- BZOJ 4316 小C的独立集
- JavaScript学习笔记之函数
- Spring配置数据源的三种方式 (JNDI\C3PO)