【Spark2.0源码学习】-6.Client启动
来源:互联网 发布:picplaypost同类软件 编辑:程序博客网 时间:2024/06/05 01:17
Client作为Endpoint的具体实例,下面我们介绍一下Client启动以及OnStart指令后的额外工作
一、脚本概览
下面是一个举例:
/opt/jdk1.7.0_79/bin/java-cp /opt/spark-2.1.0/conf/:/opt/spark-2.1.0/jars/*:/opt/hadoop-2.6.4/etc/hadoop/-Xmx1g-XX:MaxPermSize=256morg.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
二、SparkSubmit启动流程
SparkSubmit的启动流程如下:
- 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
下面仅针对于org.apache.spark.deploy.Client进行解读
三、Client启动流程
Client的启动流程如下:
- 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
四、Client的OnStart监听事件
Client的启动完成后异步执行工作如下:
- 如果是发布任务(case launch),Client创建一个DriverDescription,并向Master发起RequestSubmitDriver请求
- Command中的mainClass为: org.apache.spark.deploy.worker.DriverWrapper
- Command中的arguments为: Seq("{{WORKER_URL}}", "{{USER_JAR}}", driverArgs.mainClass)
- Master接受RequestSubmitDriver请求后,将DriverDescription封装为一个DriverInfo,
- startTime与submitDate都为当前时间
- driverId格式为:driver-yyyyMMddHHmmss-nextId,nextId是全局唯一的
- Master持久化DriverInfo,并加入待调度列表中(waitingDrivers),触发公共资源调度逻辑(公共资源调度详解见下一节内容)
- Master公共资源调度结束后,返回SubmitDriverResponse给Client
五、RpcMessage处理(receiveAndReply)
六、OneWayMessage处理(receive)
消息实例发起方接收方说明SubmitDriverResponseMasterClient KillDriverResponse Client 分类: Spark
阅读全文
0 0
- 【Spark2.0源码学习】-6.Client启动
- 【Spark2.0源码学习】-4.Master启动
- 【Spark2.0源码学习】-5.Worker启动
- 【Spark2.0源码学习】-1.概述
- 【Spark2.0源码学习】-10.Task执行与回馈
- 【Spark2.0源码学习】-2.一切从脚本说起
- 【Spark2.0源码学习】-3.Endpoint模型介绍
- 【Spark2.0源码学习】-7.Driver与DriverRunner
- 【Spark2.0源码学习】-8.SparkContext与Application介绍
- Spark2.0源码学习-Job提交与Task的拆分
- spark2.2.0源码学习过程记录:序
- spark2.2.0源码学习过程记录:Day3
- spark2.2.0源码学习过程记录:Day4
- spark2.2.0源码学习过程记录:Day5
- spark2.2.0源码学习过程记录:Day6
- spark2.2.0源码学习过程记录:Day7
- spark2.2.0源码学习过程记录:Day8
- spark2.2.0源码学习过程记录:Day9
- 线段树
- MySQL 开发实践 8 问,你能 hold 住几个?
- hdu6165 FFF at Valentine 强联通分量+拓扑排序
- 轻松搞定面试中的二叉树题目
- Zookeeper学习笔记(五)分布式计数器
- 【Spark2.0源码学习】-6.Client启动
- BOS项目及知识点总结 _02
- 将数据集做成VOC2007格式用于Faster-RCNN训练
- 计算器的改良(NOIP2000)
- C语言宏定义方法总结
- CDN及CDN加速原理
- 算法提高 ADV-74 计算整数因子
- 【Spark2.0源码学习】-7.Driver与DriverRunner
- 阴阳师PC官网(仿-->17/5月) -- 知识点