Spark中的任务调度总结
1.集群启动
在work节点启动后会向master节点注册资源情况,有多少的core和内存都会上报master统一进行管理。master节点会知道所有work节点的资源情况。
2.job执行
写好的应用程序提交到客户端
命令 | 说明 |
---|---|
Spark-submit —master spark:{ip}:7077 —class {jarPath} | 提交jar包 |
在客户端执行jar包之后会先启动Driver进程,jar包运行到new SparkContext()的时候会创建两个重要的对象,分别是DAGScheduler和TaskScheduler。
- 以下是SparkContext对象中的源码:
TaskScheduler对象的创建
TaskScheduler对象创建完毕后,会向Spark工作集群申请资源,准备为当前的应用程序进行资源的调度,最终结果把所有的Executro的进程地址反向注册给TaskScheduler。
-
TaskScheduler对象构建的流程:
DAGScheduler对象的创建
当遇到Action算子的时候会触发job的执行,DAGScheduler根据RDD的宽窄依赖划分Stage,切割完毕后会把Stage中所有的Task放到TaskSet对象中发送给TaskScheduler。
- DAGScheduler对象构建的流程:
执行任务
从上面的两个对象中已经得到了2个信息
- 通过Execute的反向注册,TaskScheduler已知所有的Execute的地址。
- 通过Stage的TaskSet已得到所有的Task
接下来就是分发Task到Execute进程中,在TaskScheduler对象中会遍历TaskSet集合把Task分发到各个Execute进程中去执行job。
- 分发task到Execute中执行job: