sparkContext创建还没完呢,紧接着前两天,我们继续探索。。作死。。。

  紧接着前几天我们继续SparkContext的创建:

 

  接下来从这里我们可以看到,spark开始加载hadoop的配置信息,第二张图中 new出来的Configuration正是hadoop的Configuration。同时,将所有sparkConf中所有以spark.hadoop.开头的属性都复制到了Hadoop的Configuration.同时又将spark.buffer.size复制为Hadoop的Configuration的配置的Io.file.buffer.size.随之加载相关jar包。再下来,我们可以看到:

  我们可以看到,将所有的executor的环境变量加载于_executorMemory以及executorEnvs,后续应该在注册executor时进行调用。随之创建_taskScheduler:

  

  那么我们深入看下createTaskScheduler的过程:

  

  这里可以看到,它干了很多变态的事情,那么先说下,什么是TaskScheduler呢?TaskScheduler负责任务的提交,并且请求集群管理器对任务调度。TaskScheduler也可以看做任务调度的客户端。那么createTaskScheduler会根据master的配置(master match),匹配部署模式,利用反射创建yarn-cluster(本例图中为local及yarn-cluster),随之initializeCoarseGrainedSchedulerBackend。(以后再深入了解CoarseGrainedSchedulerBackend)

  代码中可以看到,创建了TaskSchedulerImpl,它是什么呢?

  它从SparkConf中读取配置信息,包括每个任务分配的CPU数,失败task重试次数(可通过spark.task.maxFailures来配置),多久推测执行一次spark.speculation.interval(当然是在spark.speculation为true的情况下生效)等等。这里还有个调度模式,调度模式分为FIFO和FAIR两种,通过修改参数spark.scheduler.mode来改变。 最终创建TaskResultGetter,它的作用是对executor中的task的执行结果进行处理。

  随之,开始创建DAG。DAGScheduler主要用于在任务正式交给TaskSchedulerImpl提交之前做一些准备工作。创建job,将DAG中的RDD划分到不同的Stage,提交Stage,等等。

  

  我们继续深入看下它的创建过程。

  

  从这些变量中,我们可以看到,DAG是将所有jobId,stageId等信息之间的关系,以及缓存的RDD的partition位置等。比如getCacheLocs、getShuffleMapStage、getParentStagesAndId、newOrUsedShuffleStage。下来,通过applicationId注册并创建executor.

  

  

 中间省略一万字(其实是没看懂),下来创建并启动ExecutorAllocationManager,它是干嘛的呢?

  

  ExecutorAllocationManager是对所有的已分配的Executor进行管理。默认情况下不会创建ExecutorAllocationManager,可以修改属性spark.dynamicAllocation.enabled为true来创建。ExecutorAllocationManager可以设置动态分配最小Executor数量、动态分配最大Executor数量,每个Executor可以运行的Task数量等配置信息。(这个还真要试一下,没有配置过)ExecutorAllocationListener通过监听listenerBus里的事件、动态添加、删除exeuctor,通过Thread不断添加Executor,遍历Executor,将超时的Executor杀掉并移除。

参考文献:《深入理解Spark核心思想与源码解析》

SparkConf加载与SparkContext创建(源码阅读四)的更多相关文章

  1. SparkConf加载与SparkContext创建(源码阅读一)

    即日起开始spark源码阅读之旅,这个过程是相当痛苦的,也许有大量的看不懂,但是每天一个方法,一点点看,相信总归会有极大地提高的.那么下面开始: 创建sparkConf对象,那么究竟它干了什么了类,从 ...

  2. SparkConf加载与SparkContext创建(源码阅读二)

    紧接着昨天,我们继续开搞了啊.. 1.下面,开始创建BroadcastManager,就是传说中的广播变量管理器.BroadcastManager用于将配置信息和序列化后的RDD.Job以及Shuff ...

  3. Android 图片加载框架Glide4.0源码完全解析(二)

    写在之前 上一篇博文写的是Android 图片加载框架Glide4.0源码完全解析(一),主要分析了Glide4.0源码中的with方法和load方法,原本打算是一起发布的,但是由于into方法复杂性 ...

  4. Android必学-异步加载+Android自定义View源码【申明:来源于网络】

    Android必学-异步加载+Android自定义View源码[申明:来源于网络] 异步加载地址:http://download.csdn.net/detail/u013792369/8867609 ...

  5. ArcGIS紧凑型切片读取与应用2-webgis动态加载紧凑型切片(附源码)

    1.前言 上篇主要讲了一下紧凑型切片的的解析逻辑,这一篇主要讲一下使用openlayers动态加载紧凑型切片的web地图服务. 2.代码实现 上篇已经可以通过切片的x.y.z得对应的切片图片,现在使用 ...

  6. 38 网络相关函数(六)——live555源码阅读(四)网络

    38 网络相关函数(六)——live555源码阅读(四)网络 38 网络相关函数(六)——live555源码阅读(四)网络 简介 12)makeSocketNonBlocking和makeSocket ...

  7. 37 网络相关函数(五)——live555源码阅读(四)网络

    37 网络相关函数(五)——live555源码阅读(四)网络 37 网络相关函数(五)——live555源码阅读(四)网络 简介 10)MAKE_SOCKADDR_IN构建sockaddr_in结构体 ...

  8. 36 网络相关函数(四)——live555源码阅读(四)网络

    36 网络相关函数(四)——live555源码阅读(四)网络 36 网络相关函数(四)——live555源码阅读(四)网络 简介 7)createSocket创建socket方法 8)closeSoc ...

  9. 34 网络相关函数(二)——live555源码阅读(四)网络

    34 网络相关函数(二)——live555源码阅读(四)网络 34 网络相关函数(二)——live555源码阅读(四)网络 2)socketErr 套接口错误 3)groupsockPriv函数 4) ...

随机推荐

  1. C#常用操作类库一(验证类)

    public class Validator    {        #region  验证输入字符串为数字        /// <summary>        /// 验证输入字符串 ...

  2. discuz不能发表投票、附件上传等

    如何开启和发表投票主题 本教程主要讲述如何开启和发表投票的帖子.具体的操作如下: 1.论坛后台 => 用户 => 用户组 => 详情 => 特殊主题 => 允许发起投票设 ...

  3. Entity Framework search sequnce

    sql express, then (LocalDb)\v11.0 (LocalDb)\mssqllocaldb sqllocaldb i  could list all the local db i ...

  4. ORA-00942:table or view does not exist

    好好的表都建成功了,在PL/SQL中编辑数据时给我来这个提示,起的我没办法了.查到如下: oracle建表时有一个严重的问题,在此写出来,提醒大家注意: 先简单写一下错误内容,如各位已经发现过此问题并 ...

  5. C#面向接口编程详解(1)——思想基础

    我想,对于各位使用面向对象编程语言的程序员来说,“接口”这个名词一定不陌生,但是不知各位有没有这样的疑惑:接口有什么用途?它和抽象类有什么区别?能不能用抽象类代替接口呢?而且,作为程序员,一定经常听到 ...

  6. CSS外边距margin上下元素重叠

    CSS外边距margin上下元素重叠 转载:http://www.gaoyouyou.com/view/77.htm 两个或多个块级盒子的垂直相邻边界会重合.结果的边界宽度是相邻边界宽度中最大的值.如 ...

  7. JSP基础——属性保存范围和request对象

    JSP属性保存范围 JSP中提供了四种属性保存范围,分别为page,request,session及application. 1.page范围,指设置的属性只在当前页面有效.通过pageContext ...

  8. Matlab中fread函数的高级使用方法及其帮助文档中容易引起歧义的地方

    参考资料:http://cn.mathworks.com/help/matlab/ref/fread.html 注意:参考资料针对的Matlab版本号R2015a,我使用的是R2013b. Matla ...

  9. tomcat端口号被占用或者修改端口号的解决方法

    一)修改端口号: 在tomcat文件中找到conf里面的server.xml 在tomcat解压后的文件中按照下图操作

  10. python之目录文件操作

    [1.os] 1.重命名:os.rename(old, new) 2.删除:os.remove(file) 3.列出目录下的文件 :os.listdir(path) 4.获取当前工作目录:os.get ...