Spark源码学习1.6——Executor.scala
Executor.scala
一、Executor类
首先判断本地性,获取slaves的host name(不是IP或者host: port),匹配运行环境为集群或者本地。如果不是本地执行,需要启动一个handler来监控所有的executor进程,避免阻塞。然后,初始化Spark执行环境。向SparkEnv注册executor资源,即registerSource方法。第三步,装载类,序列化类到内存中。第四,启动worker的线程池。第五,收集所有的task任务。接下就可以分配资源给task了,即将task与executor结合。
1、launchTask():新建一个TaskRunner,对应的有task的信息;然后调用runningTasks的put方法装载该TaskRunner,并在线程池中执行该task。
2、killTask():杀死指定线程。
3、releaseWriter():获取ShuffleId,与BlockManager进行交互。具体作用?需要了解spark.shuffle.consolidatFiles的意义。
4、stop():报告停止信息,关闭线程池。
二、TaskRunner类
继承自Runnable类,是task信息的容器。
1、kill():由Executor杀死指定线程。
2、run():重载的方法。执行task的进程,更改task的状态。同时启动GC机制,task的相关信息需要反序列化出来。run方法中需要保证task的epoch值与master一致,在MapOutPutTracker中体现,保证该任务可以被master管理。等任务执行完毕,分析任务执行的时间,序列化时间等等。然后对执行结果进行序列化处理,获取存储的block的Id并将序列化数据存入block。最后是复杂的异常处理。
3、CreateClassLoader():为task建立的用来加载用户指定的jars或者任何需要用到的classes。首先检查是否是加载用户自定义的类,是则新建childExecutorURLClassLoader,否则新建ExecutorURLClassLoader,最终返回MutableURLClassLoader类型。
4、addReplClassLoaderInfNeeded():家在一个新的ClassLoader来加载另一个jar。
5、updateDependencies():根据SparkContext所提供的新文件或者新jars,装载未被加载的依赖包,同时加载这些所依赖的包到ClassLoader中。
6、startDriverHeartbeater():启动心跳机制,将taskRunner的信息发送给master。
Spark源码学习1.6——Executor.scala的更多相关文章
- Spark源码学习1.2——TaskSchedulerImpl.scala
许久没有写博客了,没有太多时间,最近陆续将Spark源码的一些阅读笔记传上,接下来要修改Spark源码了. 这个类继承于TaskScheduler类,重载了TaskScheduler中的大部分方法,是 ...
- Spark源码学习1.1——DAGScheduler.scala
本文以Spark1.1.0版本为基础. 经过前一段时间的学习,基本上能够对Spark的工作流程有一个了解,但是具体的细节还是需要阅读源码,而且后续的科研过程中也肯定要修改源码的,所以最近开始Spark ...
- Spark源码学习1.8——ShuffleBlockManager.scala
shuffleBlockManager继承于Logging,参数为blockManager和shuffleManager.shuffle文件有三个特性:shuffleId,整个shuffle stag ...
- Spark源码学习1.3——TaskSetManager.scala
TaskSetManager.scala TaskSet是指一系列被提交的task,一般是代表特定的stage中丢失的partition.TaskSetManager通过一个TaskScheduler ...
- Spark源码学习1.7——Master.scala
master第一步是加载系统定义的环境变量,如worker的超时时间.系统保留的Application数目等:第二步,加载worker的信 息,地址.id等:第三步,加载Application的信息, ...
- Spark源码学习1.5——BlockManager.scala
一.BlockResult类 该类用来表示返回的匹配的block及其相关的参数.共有三个参数: data:Iterator [Any]. readMethod: DataReadMethod.Valu ...
- Spark源码学习1.4——MapOutputTracker.scala
相关类:MapOutputTrackerMessage,GetMapOutputStatuses extends MapPutputTrackerMessage,StopMapOutputTracke ...
- Spark源码学习2
转自:http://www.cnblogs.com/hseagle/p/3673123.html 在源码阅读时,需要重点把握以下两大主线. 静态view 即 RDD, transformation a ...
- Spark源码学习3
转自:http://www.cnblogs.com/hseagle/p/3673132.html 一.概要 本篇主要阐述在TaskRunner中执行的task其业务逻辑是如何被调用到的,另外试图讲清楚 ...
随机推荐
- vertical-align
http://www.zhangxinxu.com/wordpress/2015/08/css-deep-understand-vertical-align-and-line-height/
- html5对密码加密
今天找了几个关于对html5的密码加密的方法,仅供参考 1.base64加密:在页面中引入base64.js文件,调用方法为: <html> <head> <meta c ...
- 03-方法ppt动手动脑问题及课后实验性问题总结
一.如何不使用static来进行调用函数? 1.自己定义的不需要都是static,但是要在主函数中调用就需要static了,因为main是静态 的,在类加载时就加载了.如果想用又不加可以吧自己写的方法 ...
- Phalapi 中Union和Union All的用法
有时候在进行数据库查询的时候会用到union查询,但是查询的时候会发现两个limit只有一个是有效的,如下查询 select * from table where status = 0 limit 1 ...
- 为 iTween 指定特定的回调 : onupdate, oncomplete
问题地址:Specifying a delegate for the value of onupdate in iTween 1.找到 void CallBack 2.修改以下代码: void Cal ...
- .frm,.myd,myi转换为.sql导入数据库
先说说这几种文件是干什么的: *.frm是描述了表的结构, *.myd保存了表的数据记录, *.myi则是表的索引. 其实一个.frm文件就是对应的数据库中的一个表,表示数据表的表结构. .MYD文件 ...
- windows下安装MongoDB要注意的问题
1. errno:10061 由于目标计算机积极拒绝,无法连接. 解决方法:在mongoDB的bin目录下,打开命令行,输入: mongod --dbpath "c:\data\db&qu ...
- HTTP 错误 500.21 - Internal Server Error
HTTP 错误 500.21 - Internal Server Error 处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipe ...
- 网页 css 样式 初始化
body, div, ul, ol, dl, dt, dd, li, dl, h1, h2, h3, h4 {margin:0;padding:0;font-style:normal;font:12p ...
- 利用windbg 分析IIS 的线程池w3wp程序多线程挂起问题
前几天有个朋友发个了在windows server 2008跑的IIS 跑的程序w3wp程序dmp,要我帮忙分析为何线程都挂起不运行 经过查阅资料用windbg可以调试可以输出线程的调用堆栈,但是准备 ...