1. Spark-Submit 提交参数
参数名 | 参数值 |
---|---|
–master | spark://host:port;mesos://host:port,yarn;yarn-cluster,yarn-clint;local |
–deploy-mode | Driver 程序运行的地方,client或者cluster,默认是client |
–class | 主类名 |
–jars | 逗号分隔本地jars,Driver和executor依赖的第三方包 |
–files | 用逗号分隔的文件列表,会放置在每个executor工作目录中 |
–conf | spark的配置属性 |
–driver-memory | Driver程序使用内存大小(例如:520M,2G),默认1024M |
–executor-memory | 每个executor内存大小(例如:2G),默认1G |
–driver-cores | Driver程序使用core 个数(默认1),仅限于spark standalone的cluster模式 |
–supervise | 失败后是否重启driver。仅限于spark standalone或Mesos的cluster |
–total-executor-cores | executor使用的总核数,仅限于SparkStandalone、Spark on Mesos模式 |
–executor-cores | 每个executor使用的core数,spark on yarn 默认为1,standalone默认为worker上所有可用的core。 |
Yarn-only | |
–driver-cores | driver使用的core,仅在cluster模式下cluster模式下,默认为1。 |
–queue | 指定资源队列的名称,默认:default |
–num-executors | 一共启动executor数量,默认2个。 |
2. 资源调度源码分析
2.1 资源请求简单图
- 执行./start-all.sh启动集群。
- Master节点启动后,通过ssh与Worker节点通信。
- Worker节点反向注册到Master节点。
- Master节点把Worker节点的信息封装到
HashSet[WorkerInfo]
类型的workers
集合。 - 客户端通过
spark-submit
执行任务命令。 - 向Master节点请求启动一个Driver。
- Master节点封装一个
ArrBuffer[DriverInfo]
类型的waitingDriver
(等待执行的Driver)。 - Master节点选择一个节点启动Driver。
- Driver向Master为当前的Application申请资源。
- Master节点封装Application的资源给Driver。
- Driver的发送任务到Worker节点执行。
2.2 资源调度Master路径
CLASS="org.apache.spark.deploy.master.Master"
2.3 提交应用程序,submit的路径
org.apache.spark.deploy.SparkSubmit
2.4 总结
- Executor在集群中分散启动,有利于task计算数据本地化。
- 默认情况下(提交任务的时候没有设置
--executor-cores
选项),每个Worker为当前的Application启动一个Executor。这个Executor会使用这个Worker的所有的cores和1G内存。 - 如果想Worker上启动多个Executor,提交Application的时候需要加
--executor-cores
这个选项。 - 默认情况下没有设置
--total-executor-cores
,一个Application会使用Spark集群中所有的cores。
2.5 结论演示
使用Spark-submit提交任务演示。
-
默认情况下每个Worker为当前的Application启动一个Executor。这个Executor使用集群中所有的cores和1G内存。
./spark-submit --master spark://masterNode:7077 --class org.apache.spark.examples.SparkPi ../lib/spark-exeamples-1.6.0-hadoop2.6.0.jar 1000
-
在Worker上启动多个Executor,设置
--executor-cores
参数指定executor使用的core数量。./spark-submit --master spark://masterNode:7077 --executor-cores 1 --class org.apache.spark.examples.SparkPi ../lib/spark-exeamples-1.6.0-hadoop2.6.0.jar 1000
-
内存不足的情况下启动core的情况。Spark启动时不仅看core配置参数,也要看配置的core的内存是否够用。
./spark-submit --master spark://masterNode:7077 --executor-cores 1 --executor-memory 3g --class org.apache.spark.examples.SparkPi ../lib/spark-exeamples-1.6.0-hadoop2.6.0.jar 1000
-
--total-executor-cores
集群中共使用多少cores。注意:一个进程不能让集群多个节点共同启动。
./spark-submit --master spark://masterNode:7077 --executor-cores 1 --executor-memory 3g --total-executor-cores 3 --class org.apache.spark.examples.SparkPi ../lib/spark-exeamples-1.6.0-hadoop2.6.0.jar 1000