spark-submit
前言
上文Yarn源码剖析(一) --- RM与NM服务启动以及心跳通信介绍了yarn是如何启动的,本文将介绍在yarn正常启动后,任务是如何通过spark-submit提交到yarn上的。
spark-submit脚本
1. 先来观察一下任务提交时的spark-submit脚本中各个参数的含义(并没列举所有,只列举了关键的几个参数)
/spark/bin/spark-submit \
--master yarn \ //提交模式,显而易见我们是提交到yarn上
--deploy-mode cluster \ //运行的模式,还有一种client模式,但大多用于调试,此处使用cluster模式
--class org.apache.spark.test \ //提交的任务
--name "test" \ //任务名字
--queue root.default \ //提交的队列
--driver-memory 3g \ //为driver申请的内存
--num-executors 1 \ //executors的数量,对应yarn中的Container个数
--executor-memory 6g \ //为每一个executor申请的内存
--executor-cores 4 \ //为每一个executor申请的core
--conf spark.yarn.driver.memoryOverhead=1g \ //driver可使用的非堆内存,这些内存用于如VM,字符 串常量池以及其他额外本地开销等
--conf spark.yarn.executor.memoryOverhead=2g \ //每个executor可使用的非堆内存,这些内存用于如 VM,字符串常量池以及其他额外本地开销等
2. 用户按照自己的需求提交了该脚本,然后进入到任务提交阶段,实现类是org.apache.spark.deploy.SparkSubmit:
从main方法中可以看到这段代码,如果是SUBMIT,则调用submit
调用顺序:main--> submit(appArgs)->runMain(childArgs, childClasspath,sysProps,hildMainCl