SparkConf加载与SparkContext创建(源码阅读四)
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),随之initialize了CoarseGrainedSchedulerBackend。(以后再深入了解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创建(源码阅读四)的更多相关文章
- SparkConf加载与SparkContext创建(源码阅读一)
即日起开始spark源码阅读之旅,这个过程是相当痛苦的,也许有大量的看不懂,但是每天一个方法,一点点看,相信总归会有极大地提高的.那么下面开始: 创建sparkConf对象,那么究竟它干了什么了类,从 ...
- SparkConf加载与SparkContext创建(源码阅读二)
紧接着昨天,我们继续开搞了啊.. 1.下面,开始创建BroadcastManager,就是传说中的广播变量管理器.BroadcastManager用于将配置信息和序列化后的RDD.Job以及Shuff ...
- Android 图片加载框架Glide4.0源码完全解析(二)
写在之前 上一篇博文写的是Android 图片加载框架Glide4.0源码完全解析(一),主要分析了Glide4.0源码中的with方法和load方法,原本打算是一起发布的,但是由于into方法复杂性 ...
- Android必学-异步加载+Android自定义View源码【申明:来源于网络】
Android必学-异步加载+Android自定义View源码[申明:来源于网络] 异步加载地址:http://download.csdn.net/detail/u013792369/8867609 ...
- ArcGIS紧凑型切片读取与应用2-webgis动态加载紧凑型切片(附源码)
1.前言 上篇主要讲了一下紧凑型切片的的解析逻辑,这一篇主要讲一下使用openlayers动态加载紧凑型切片的web地图服务. 2.代码实现 上篇已经可以通过切片的x.y.z得对应的切片图片,现在使用 ...
- 38 网络相关函数(六)——live555源码阅读(四)网络
38 网络相关函数(六)——live555源码阅读(四)网络 38 网络相关函数(六)——live555源码阅读(四)网络 简介 12)makeSocketNonBlocking和makeSocket ...
- 37 网络相关函数(五)——live555源码阅读(四)网络
37 网络相关函数(五)——live555源码阅读(四)网络 37 网络相关函数(五)——live555源码阅读(四)网络 简介 10)MAKE_SOCKADDR_IN构建sockaddr_in结构体 ...
- 36 网络相关函数(四)——live555源码阅读(四)网络
36 网络相关函数(四)——live555源码阅读(四)网络 36 网络相关函数(四)——live555源码阅读(四)网络 简介 7)createSocket创建socket方法 8)closeSoc ...
- 34 网络相关函数(二)——live555源码阅读(四)网络
34 网络相关函数(二)——live555源码阅读(四)网络 34 网络相关函数(二)——live555源码阅读(四)网络 2)socketErr 套接口错误 3)groupsockPriv函数 4) ...
随机推荐
- cnblogs开篇留念
之前看过很多大牛程序员们介绍的一些经验之类的文章,几乎每个人都提到了一点就是平时要写博客,记录一些自己平时学习和工作过程中学习到的一些技术点和心得.之前也用过一些其他的网站博客,上周有同事推荐了一篇文 ...
- bash 取文件特定行
比如,想要取某文件10-20行 可以用sed sed -n '10,20p' XXX.txt 非常方便!
- keras 入门之 regression
本实验分三步: 1. 建立数据集 2. 建立网络并训练 3. 可视化 import numpy as np from keras.models import Sequential from keras ...
- 通过gradle来导入jar包
1.通过gradle配置第三方jar包 我们看到,每个module都有一个build.gradle文件,它其实是对应module的配置文件.关于build.gradle文件中具体内容的含义,我们将在最 ...
- Surprise团队第三周项目总结
Surprise团队第二周项目总结 项目进展 这周我们小组的项目在上周的基础上进行了补充,主要注重在注册登录界面的实现,以及关于数据库的一些学习. 在设计注册登录界面时,每一块的地方控件都不一样,比如 ...
- oracle执行cmd的实现方法
网络上找到的在sqlplus中执行cmd的一些命令,主要有四种方法,这边都做了一下测试,这里做一下记录: 测试环境:window2003+Oracle 11.2.0.1.0 第一种方法: 最简单的执行 ...
- nodejs--模块
在客户端可以将所有的javascript代码分割成几个JS文件,然后在浏览器中将这些JS文件合并.但是在nodejs中是通过以模块为单位来划分所有功能的.每一个模块为一个JS文件,每一个模块中定义的全 ...
- MySQL查询缓存
MySQL查询缓存 用于保存MySQL查询语句返回的完整结果,被命中时,MySQL会立即返回结果,省去解析.优化和执行等阶段. 如何检查缓存? MySQL保存结果于缓存中: 把SELECT语句本身做h ...
- code forces 383 Arpa's loud Owf and Mehrdad's evil plan(有向图最小环)
Arpa's loud Owf and Mehrdad's evil plan time limit per test 1 second memory limit per test 256 megab ...
- JSP学习流程