-
构建DAG(Driver 端完成)
使用算子操作 RDD 进行各种 Transformation 操作,最后通过 Action 操作触发 Spark 作业运行。提交之后 Spark 会根据转换过程所产生的 RDD 之间的依赖关系构建有向无环图
-
DAG 切割(Driver 端完成)
DAG 切割主要根据 RDD 的依赖是否为宽窄依赖来解决切割节点,当遇到宽依赖就将任务划分为一个新的调度阶段(Stage)。每个 Stage 中包含一个或多个 Task。这些 Task 将形成任务集(TaskSet),提交给底层调度器进行调度运行。
-
任务调度(Driver 端完成)
每一个 Spark 任务调度器只为一个 SparkContext 实例服务。当任务调度器收到任务集后负责把任务集以 Task 任务的形式分发至 Worker 节点的 Executor 进程中执行,如果某个任务失败,任务调度器负责重新分配该任务的计算。
-
执行任务(Worker 的 Executor 执行)
当 Executor 收到发送过来的任务后,将以多线程(会再启动 Executor 的时候就初始化好一个线程池)的方式执行任务计算,每个线程负责一个任务,任务结束后会根据任务的类型选择相应的返回方式将结果返回给任务调度器