【Spark2.0源碼學習】-6.Client啟動
阿新 • • 發佈:2017-05-24
rms permsize wrapper 2.0 proxy waiting 默認 說明 加載器
六、OneWayMessage處理(receive)
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
- [--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請求
-
- 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
消息實例 | 發起方 | 接收方 | 說明 |
消息實例 | 發起方 | 接收方 | 說明 |
SubmitDriverResponse | Master | Client | |
KillDriverResponse | Client |
【Spark2.0源碼學習】-6.Client啟動