资源调度源码分析和任务调度源码分析

1.资源调度源码分析
资源请求简单图
在这里插入图片描述
资源调度Master路径:
在这里插入图片描述
路径:spark-1.6.0/core/src/main/scala/org.apache.spark/deploy/Master/Master.scala
提交应用程序,submit的路径:
在这里插入图片描述
路径:spark-1.6.0/core/src/main/scala/org.apache.spark/ deploy/SparkSubmit.scala
总结:
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。
结论演示
使用Spark-submit提交任务演示。也可以使用spark-shell
1.默认情况每个worker为当前的Application启动一个Executor,这个Executor使用集群中所有的cores和1G内存。
./spark-submit
–master spark://node1:7077
–class org.apache.spark.examples.SparkPi
…/lib/spark-examples-1.6.0-hadoop2.6.0.jar
10000
2.在workr上启动多个Executor,设置–executor-cores参数指定每个executor使用的core数量。
./spark-submit
–master spark://node1:7077
–executor-cores 1
–class org.apache.spark.examples.SparkPi
…/lib/spark-examples-1.6.0-hadoop2.6.0.jar
10000
3.内存不足的情况下启动core的情况。Spark启动是不仅看core配置参数,也要看配置的core的内存是否够用。
./spark-submit
–master spark://node1:7077
–executor-cores 1
–executor-memory 3g
–class org.apache.spark.examples.SparkPi
…/lib/spark-examples-1.6.0-hadoop2.6.0.jar
10000
4.–total-executor-cores集群中共使用多少cores
注意:一个进程不能让集群多个节点共同启动。
./spark-submit
–master spark://node1:7077
–executor-cores 1
–executor-memory 2g
–total-executor-cores 3
–class org.apache.spark.examples.SparkPi
…/lib/spark-examples-1.6.0-hadoop2.6.0.jar
10000
2.任务调度源码分析
Action算子开始分析
任务调度可以从一个Action类算子开始。因为Action类算子会触发一个job的执行。
划分stage,以taskSet形式提交任务
DAGScheduler 类中getMessingParentStages()方法是切割job划分stage。可以结合以下这张图来分析:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_20174285/article/details/86004328