【Spark2.0源码学习】-6.Client启动
2017-05-24 10:44
573 查看
Client作为Endpoint的具体实例,下面我们介绍一下Client启动以及OnStart指令后的额外工作
一、脚本概览
下面是一个举例:
二、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 & [
[--deploy-mode] = cluster & [
[--deploy-mode] = cluster & [
[--deploy-mode] = cluster & [
获取childArgs(子运行时对应命令行组装参数)
[--deploy-mode] = cluster & [
[--deploy-mode] = cluster & [
[--deploy-mode] = cluster & [
[--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)
一、脚本概览
下面是一个举例:
/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=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
二、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
获取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)
消息实例 | 发起方 | 接收方 | 说明 |
消息实例 | 发起方 | 接收方 | 说明 |
SubmitDriverResponse | Master | Client | |
KillDriverResponse | Client |
相关文章推荐
- 【Spark2.0源码学习】-6.Client启动
- 【Spark2.0源码学习】-4.Master启动
- 【Spark2.0源码学习】-4.Master启动
- 【Spark2.0源码学习】-5.Worker启动
- 【Spark2.0源码学习】-5.Worker启动
- Spark源码学习(一)---Spark的启动脚本
- Spark2.0源码学习-Job提交与Task的拆分
- Spark源码学习(二)---Master和Worker的启动以及Actor通信流程
- 【Spark2.0源码学习】-10.Task执行与回馈
- 【Spark2.0源码学习】-7.Driver与DriverRunner
- 【Spark2.0源码学习】-2.一切从脚本说起
- Spark2.X源码学习--从SparkContext创建分析AppClient注册
- 【Spark2.0源码学习】-7.Driver与DriverRunner
- 【Spark2.0源码学习】-3.Endpoint模型介绍
- spark源码学习(三)---worker源码分析-worker启动driver、executor分析
- 【Spark2.0源码学习】-3.Endpoint模型介绍
- 【Spark2.0源码学习】-9.Job提交与Task的拆分
- 【Spark2.0源码学习】-10.Task执行与回馈
- 【Spark2.0源码学习】-9.Job提交与Task的拆分
- 【Spark2.0源码学习】-8.SparkContext与Application介绍