spark调度系统核心组件SparkContext、DAGSchedul、TaskScheduler、Taskset介绍

发布于:2025-05-24 ⋅ 阅读:(22) ⋅ 点赞:(0)


Spark调度系统的核心组件主要有SparkContext、DAGScheduler和TaskScheduler

SparkContext介绍

1. SparkContext

1、资源申请

  • SparkContext是Spark应用程序与集群管理器(如Standalone模式下的Master、Yarn模式下的ResourceManager)通信的接口,负责向集群管理器注册并申请资源
  • 例如在Standalone模式中,在Client中创建SparkContext(简称SC)后,SC向master注册并申请资源,master通过心跳了解worker节点资源情况,挑选空闲worker创建Executor分配给SC
  • Yarn - client模式下,先在client中创建SparkContext(SC),SC向ResourceManager申请创建ApplicationMaster,之后由ApplicationMaster向ResourceManager申请NodeManager来为SC创建Executor 。

2、任务划分与调度

  • SparkContext包含DAGScheduler和TaskScheduler。它负责将用户提交的任务进行分解,先分解成Stage,然后进一步分解出task,并发送到Executor中执行
  • 例如在任务运行阶段,Executor向SC报到后,SC将任务分解,Executor创建线程池来运行任务,并及时向SC汇报执行情况 。

3、其他职责

  • SparkContext运行在Driver中,负责产生DAG,提交Job,转化Task 。同时它也是Spark最重要的API,是用户逻辑与Spark集群主要的交互接口 。

2.DAGScheduler

1、构建DAG与划分Stage

  • 当用户在RDD上执行Action操作时,Spark会根据相关依赖关系进行血缘(lineage)计算,构建有向无环图(DAG)
  • DAGScheduler负责将DAG图根据宽依赖(如ShuffleDependency)划分成多个Stage。遇见一个宽依赖就划分一个Stage,这个Stage的任务被称为ShuffleMapTask
  • 如果遇见一个窄依赖,就可以将它加入到同一个Stage中。例如wordcount程序中,根据操作算子和RDD依赖关系进行Stage的划分 。

2、Stage调度:按照Stage之间的依赖顺序调度各个Stage

  • 例如在调度流程中,将DAG交给DAGScheduler后,它根据ShuffleDependency切分Stage,并按照依赖顺序调度这些Stage 。

3、失败恢复:当某个Stage执行失败时,DAGScheduler通过血缘回溯重新调度失败的Stage及其后续Stage 。例如通过重新提交相关的TaskSet来尝试恢复执行 。

  • 核心职责

    • RDD血缘关系转换为Stage图
    • 处理Stage划分策略
      RDD1
      ShuffleDependency
      ShuffleMapStage

网站公告

今日签到

点亮在社区的每一天
去签到