Spark 从 0 到 1 学习(3) —— Apache Spark 提交参数和资源调度源码分析

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 资源请求简单图

在这里插入图片描述

  1. 执行./start-all.sh启动集群。
  2. Master节点启动后,通过ssh与Worker节点通信。
  3. Worker节点反向注册到Master节点。
  4. Master节点把Worker节点的信息封装到HashSet[WorkerInfo]类型的workers集合。
  5. 客户端通过 spark-submit执行任务命令。
  6. 向Master节点请求启动一个Driver。
  7. Master节点封装一个ArrBuffer[DriverInfo]类型的waitingDriver(等待执行的Driver)。
  8. Master节点选择一个节点启动Driver。
  9. Driver向Master为当前的Application申请资源。
  10. Master节点封装Application的资源给Driver。
  11. Driver的发送任务到Worker节点执行。

2.2 资源调度Master路径

CLASS="org.apache.spark.deploy.master.Master"

2.3 提交应用程序,submit的路径

org.apache.spark.deploy.SparkSubmit

2.4 总结

  1. Executor在集群中分散启动,有利于task计算数据本地化。
  2. 默认情况下(提交任务的时候没有设置--executor-cores选项),每个Worker为当前的Application启动一个Executor。这个Executor会使用这个Worker的所有的cores和1G内存。
  3. 如果想Worker上启动多个Executor,提交Application的时候需要加--executor-cores这个选项。
  4. 默认情况下没有设置--total-executor-cores,一个Application会使用Spark集群中所有的cores。

2.5 结论演示

使用Spark-submit提交任务演示。

  1. 默认情况下每个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
    
  2. 在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
    
  3. 内存不足的情况下启动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
    
  4. --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
    

猜你喜欢

转载自blog.csdn.net/dwjf321/article/details/109047999