您的位置:首页 > 其它

【Spark2.0源码学习】-6.Client启动

2017-05-24 10:44 573 查看
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=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)

消息实例发起方接收方说明
六、OneWayMessage处理(receive)
消息实例发起方接收方说明
SubmitDriverResponseMasterClient
KillDriverResponseClient
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: