Spark中的任务调度总结

Spark中的任务调度总结

1.集群启动

在work节点启动后会向master节点注册资源情况,有多少的core和内存都会上报master统一进行管理。master节点会知道所有work节点的资源情况。


master统一管理资源

2.job执行

写好的应用程序提交到客户端

命令 说明
Spark-submit —master spark:{ip}:7077 —class {jarPath} 提交jar包

在客户端执行jar包之后会先启动Driver进程,jar包运行到new SparkContext()的时候会创建两个重要的对象,分别是DAGScheduler和TaskScheduler。

  • 以下是SparkContext对象中的源码:
创建TaskScheduler,和DAGScheduler
TaskScheduler对象的创建

TaskScheduler对象创建完毕后,会向Spark工作集群申请资源,准备为当前的应用程序进行资源的调度,最终结果把所有的Executro的进程地址反向注册给TaskScheduler。

  • TaskScheduler对象构建的流程:


    构建TaskScheduler对象
DAGScheduler对象的创建

当遇到Action算子的时候会触发job的执行,DAGScheduler根据RDD的宽窄依赖划分Stage,切割完毕后会把Stage中所有的Task放到TaskSet对象中发送给TaskScheduler。

  • DAGScheduler对象构建的流程:
创建DAGScheduler对象
执行任务

从上面的两个对象中已经得到了2个信息

  • 通过Execute的反向注册,TaskScheduler已知所有的Execute的地址。
  • 通过Stage的TaskSet已得到所有的Task

接下来就是分发Task到Execute进程中,在TaskScheduler对象中会遍历TaskSet集合把Task分发到各个Execute进程中去执行job。

  • 分发task到Execute中执行job:
分发task执行任务

你可能感兴趣的:(Spark中的任务调度总结)