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的更多相关文章

  1. Spark源码学习1.2——TaskSchedulerImpl.scala

    许久没有写博客了,没有太多时间,最近陆续将Spark源码的一些阅读笔记传上,接下来要修改Spark源码了. 这个类继承于TaskScheduler类,重载了TaskScheduler中的大部分方法,是 ...

  2. Spark源码学习1.1——DAGScheduler.scala

    本文以Spark1.1.0版本为基础. 经过前一段时间的学习,基本上能够对Spark的工作流程有一个了解,但是具体的细节还是需要阅读源码,而且后续的科研过程中也肯定要修改源码的,所以最近开始Spark ...

  3. Spark源码学习1.8——ShuffleBlockManager.scala

    shuffleBlockManager继承于Logging,参数为blockManager和shuffleManager.shuffle文件有三个特性:shuffleId,整个shuffle stag ...

  4. Spark源码学习1.3——TaskSetManager.scala

    TaskSetManager.scala TaskSet是指一系列被提交的task,一般是代表特定的stage中丢失的partition.TaskSetManager通过一个TaskScheduler ...

  5. Spark源码学习1.7——Master.scala

    master第一步是加载系统定义的环境变量,如worker的超时时间.系统保留的Application数目等:第二步,加载worker的信 息,地址.id等:第三步,加载Application的信息, ...

  6. Spark源码学习1.5——BlockManager.scala

    一.BlockResult类 该类用来表示返回的匹配的block及其相关的参数.共有三个参数: data:Iterator [Any]. readMethod: DataReadMethod.Valu ...

  7. Spark源码学习1.4——MapOutputTracker.scala

    相关类:MapOutputTrackerMessage,GetMapOutputStatuses extends MapPutputTrackerMessage,StopMapOutputTracke ...

  8. Spark源码学习2

    转自:http://www.cnblogs.com/hseagle/p/3673123.html 在源码阅读时,需要重点把握以下两大主线. 静态view 即 RDD, transformation a ...

  9. Spark源码学习3

    转自:http://www.cnblogs.com/hseagle/p/3673132.html 一.概要 本篇主要阐述在TaskRunner中执行的task其业务逻辑是如何被调用到的,另外试图讲清楚 ...

随机推荐

  1. contiki-process_run()

    process_run()函数位于main函数中 ) { do { } ); idle_count++; } 找到函数的声明处: /** * Run the system once - call po ...

  2. 2016年12月31日 学习java 第一天

    6个月没写代码了 现在从头开是学 又遇到了很基础的问题 以前配环境变量的时候  配过classpath  其实不要配classpath  因为运行的时候会优先去classpath去找 class文件  ...

  3. 利用Babel来转化你的ES2015脚本初步

    我们在前面已经安装和学习过babel 安装babel-cli 这是babel解释器的客户端主程序 npm install -g babel-cli 安装”编译”插件(babel的JSX语法转换器) n ...

  4. ZOJ 2048 highways

    题目 比我想象地要容易很多..一开始想得太复杂了,本来想试一下kruskal算法的,嫌麻烦..还是用了之前1203的prim算法...以为要注意这道题的输出顺序,结果不用,直接输出就可以了,就是注意一 ...

  5. 采用flask+uwsgi+nginx架构将flask应用程序部署在腾讯云

    最近一星期加班为学校做了一个教师发展中心平台,在此总结一下部署经验 环境:Centos7.0  python2.7.5 1.安装nginx 命令行输入指令:sudo yum install nginx ...

  6. ArcGIS GDB 文件中的lock文件影响复制

    复制或压缩gdb文件的时候,经常碰到有lock文件,解决方法是: 在catalog中停止相应的地图服务 如果用catalog预览过相应的地图,关闭catalog

  7. Dns 类

    Dns 类型公开以下成员. 方法       名称 说明 BeginGetHostAddresses 异步返回指定主机的 Internet 协议 (IP) 地址. BeginGetHostByName ...

  8. Python笔记总结week3

    Set集合: 无序,不重复的序列 a. 创建 se = {"123,"456" } print(type(se)) #创建集合方式 s1 = se = {"12 ...

  9. Vue2.X的状态管理vuex记录

    记住上述的顺序情况:想要改变state,只能通过Mutation,虽然action可以直接改变state,这样会使每个状态可以方便的跟踪和记录(用Devtools跟踪) vue Method   -- ...

  10. VS2003"无法启动调试 没有正确安装调试器"的解决办法

    VS2003"无法启动调试 没有正确安装调试器"的解决方法 在用VS2003做项目的时候,经常调试程序,但是有时候回出现如下问题“无法启动调试,没有正确安装调试器,请运行安装程序或 ...