【Spark2.0源码学习】-6.Client启动
Client作为Endpoint的具体实例,下面我们介绍一下Client启动以及OnStart指令后的额外工作
/opt/jdk1..0_79/bin/java
-cp /opt/spark-2.1./conf/:/opt/spark-2.1./jars/*:/opt/hadoop-2.6.4/etc/hadoop/
-Xmx1g
-XX:MaxPermSize=256m
org.apache.spark.deploy.SparkSubmit
--master spark://zqh:7077
--class org.apache.spark.examples.SparkPi
../examples/jars/spark-examples_2.11-2.1.0.jar 10
- SparkSubmitArguments:
- 解析Client启动的参数
- --name --master --class --deploy-mode
- --num-executors --executor-cores --total-executor-cores --executor-memory
- --driver-memory --driver-cores --driver-class-path --driver-java-options --driver-library-path
- --properties-file
- --kill --status --supervise --queue
- --files --py-files
- --archives --jars --packages --exclude-packages --repositories
- --conf(解析存入Map : sparkProperties中)
- --proxy-user --principal --keytab --help --verbose --version --usage-error
- 合并--properties-file(没有配置默认为conf/spark-defaults.conf)文件配置项(不在--conf中的配置 )至sparkProperties
- 删除sparkProperties中不以spark.开头的配置项目
- 启动参数为空的配置项从sparkProperties中合并
- 根据action(SUBMIT,KILL,REQUEST_STATUS)校验各自必须参数是否有值
- Case Submit:
- 获取childMainClass
- [--deploy-mode] = clent(默认):用户任务启动类mainClass(--class)
- [--deploy-mode] = cluster & [
--master]= spark:* & useRest: org.apache.spark.deploy.rest.RestSubmissionClient - [--deploy-mode] = cluster & [
--master]= spark:* & !useRest : org.apache.spark.deploy.Client - [--deploy-mode] = cluster & [
--master]= yarn: org.apache.spark.deploy.yarn.Client - [--deploy-mode] = cluster & [
--master]= mesos:*: org.apache.spark.deploy.rest.RestSubmissionClient
- 获取childArgs(子运行时对应命令行组装参数)
- [--deploy-mode] = cluster & [
--master]= spark:* & useRest: 包含primaryResource与mainClass - [--deploy-mode] = cluster & [
--master]= spark:* & !useRest : 包含--supervise --memory --cores launch 【childArgs】, primaryResource, mainClass - [--deploy-mode] = cluster & [
--master]= yarn:--class --arg --jar/--primary-py-file/--primary-r-file - [--deploy-mode] = cluster & [
--master]= mesos:*: primaryResource
- [--deploy-mode] = cluster & [
- 获取childClasspath
- [--deploy-mode] = clent:读取--jars配置,与primaryResource信息(../examples/jars/spark-examples_2.11-2.1.0.jar)
- 获取sysProps
- 将sparkPropertie中的所有配置封装成新的sysProps对象,另外还增加了一下额外的配置项目
- 将childClasspath通过当前的类加载器加载中
- 将sysProps设置到当前jvm环境中
- 最终反射执行childMainClass,传参为childArgs

- SparkConf:加载key以spark.开头的系统属性(Utils.getSystemProperties)
- ClientArguments:
- 解析Client启动的参数
- --cores -c --memory -m --supervise -s --verbose -v
- launch jarUrl master mainClass
- kill master driverId
- 将--properties-file(没有配置默认为conf/spark-defaults.conf)中spark.开头的配置存入SparkConf
- 在没有配置情况下,cores默认为1核
- 在没有配置情况下,memory默认为1G
- NettyRpcEnv中的内部处理遵循RpcEndpoint统一处理,这里不再赘述
- 最终守护进程会一直存在等待结束信awaitTermination

- 如果是发布任务(case launch),Client创建一个DriverDescription,并向Master发起RequestSubmitDriver请求
.png)

- Command中的mainClass为: org.apache.spark.deploy.worker.DriverWrapper
- Command中的arguments为: Seq("{{WORKER_URL}}", "{{USER_JAR}}", driverArgs.mainClass)
- Master接受RequestSubmitDriver请求后,将DriverDescription封装为一个DriverInfo,
.png)

- startTime与submitDate都为当前时间
- driverId格式为:driver-yyyyMMddHHmmss-nextId,nextId是全局唯一的
- Master持久化DriverInfo,并加入待调度列表中(waitingDrivers),触发公共资源调度逻辑(公共资源调度详解见下一节内容)
- Master公共资源调度结束后,返回SubmitDriverResponse给Client
| 消息实例 | 发起方 | 接收方 | 说明 |
| 消息实例 | 发起方 | 接收方 | 说明 |
| SubmitDriverResponse | Master | Client | |
| KillDriverResponse | Client |
【Spark2.0源码学习】-6.Client启动的更多相关文章
- 【Spark2.0源码学习】-1.概述
Spark作为当前主流的分布式计算框架,其高效性.通用性.易用性使其得到广泛的关注,本系列博客不会介绍其原理.安装与使用相关知识,将会从源码角度进行深度分析,理解其背后的设计精髓,以便后续 ...
- spark2.0源码学习
[Spark2.0源码学习]-1.概述 [Spark2.0源码学习]-2.一切从脚本说起 [Spark2.0源码学习]-3.Endpoint模型介绍 [Spark2.0源码学习]-4.Master启动 ...
- 【Spark2.0源码学习】-2.一切从脚本说起
从脚本说起 在看源码之前,我们一般会看相关脚本了解其初始化信息以及Bootstrap类,Spark也不例外,而Spark我们启动三端使用的脚本如下: %SPARK_HOME%/sbin/st ...
- 【Spark2.0源码学习】-3.Endpoint模型介绍
Spark作为分布式计算框架,多个节点的设计与相互通信模式是其重要的组成部分. 一.组件概览 对源码分析,对于设计思路理解如下: RpcEndpoint: ...
- 【Spark2.0源码学习】-8.SparkContext与Application介绍
在前面的内容,我们针对于RpcEndpoint启动以及RpcEndpoint消息处理机制进行了详细的介绍,在我们的大脑里,基本上可以构建Spark各节点的模样.接下来的章节将会从Sp ...
- 【Spark2.0源码学习】-4.Master启动
Master作为Endpoint的具体实例,下面我们介绍一下Master启动以及OnStart指令后的相关工作 一.脚本概览 下面是一个举例: /opt/jdk1..0_79/ ...
- 【Spark2.0源码学习】-5.Worker启动
Worker作为Endpoint的具体实例,下面我们介绍一下Worker启动以及OnStart指令后的额外工作 一.脚本概览 下面是一个举例: /opt/jdk1..0_79/ ...
- 【Spark2.0源码学习】-9.Job提交与Task的拆分
在前面的章节Client的加载中,Spark的DriverRunner已开始执行用户任务类(比如:org.apache.spark.examples.SparkPi),下面我们开始针对于用 ...
- ThinkPHP5.0源码学习之框架启动流程
ThinkPHP5框架的启动流程图如下: ThinkPHP5的启动流程按照文件分为三步: 1.请求入口(public/index.php) 2.框架启动(thinkphp/start.php) 3.应 ...
随机推荐
- 4.在浏览器中解析XML
要在浏览器中解析获取XML数据,一般只需经过两个步骤:第一,将XML文档.XML字符串转化成XMLDoc对象.第二,使用JS操作XMLDoc对象. 3.1 将XML文档或XML字符串转化成XMLDoc ...
- sublime Text3+emmet(快速开发)
sublime软件使用Emmet插件快速编写CSS样式 基本的CSS样式编写时,很多样式只需输入首字母即可得到不带属性值的CSS样式,像上面说到的margin.而 ...
- php 1到100累加 新方法
<?php $sum = 0; for($i=0;$i<=100;$i++){ $sum += $i; } echo $sum; 之前只是这么写. 现在发现可以这么写 $sum = arr ...
- css浮动布局
上次我们一起对盒子模型进行了一定的了解,今天我们就对css浮动布局做一下研究.首先我们来了解一下网页基本布局的三种形式. 首先我们来了解一下什么是网页布局: 网页的布局方式其实就是指浏览器是如何对网页 ...
- 【R.转载】apply函数族的使用方法
为什么用apply 因为我是一个程序员,所以在最初学习R的时候,当成"又一门编程语言"来学习,但是怎么学都觉得别扭.现在我的看法倾向于,R不是一种通用型的编程语言,而是一种统计领域 ...
- 体验VS2017的Live Unit Testing
相对于传统的Unit Test,VS2017 带来了一个新的功能,叫Live Unit Testing,从字面意思理解就是实时单元测试,在实际的使用中,这个功能就是可以在编写代码的时候进行实时的bac ...
- 关于阿里图标库Iconfont生成图标的三种使用方式(fontclass/unicode/symbol)
1.附阿里图标库链接:http://www.iconfont.cn/ 2.登录阿里图标库以后,搜索我们需要的图标,将其加入购物车,如图3.将我们需要的图标全部挑选完毕以后,点击购物车图标4.这时候右侧 ...
- C语言中关于三目运算符的注意事项
C语言中常见的条件运算符?:在运算符优先级中排行13.部分时候可以代替if--else语句,使代码更加简洁.但是更容易隐含一些不易觉察的错误. 最近接了一个项目,本来通信协议部分很简单,自己的STM3 ...
- kvc模式详解
java利用反射机制访问类的 私有变量.OC的KVC模式也是一样,用来访问私有变量用的. 用字符串去访问对象实例变量的机制. //KVC模式-(void)KVCtest{ [_dm valueForK ...
- 搜索结果Refinement 行为总结之 multi-selection refinement
几乎所有的购物网站的搜索结果页面都会提供refinement (filtering) 给用户去过滤产品,以便能更快找到自己想要的产品.(做的都是国外的项目,不太清楚这个功能地道的中文名是什么.所以就暂 ...