Spark--Spark DAGScheduler与TaskScheduler调度器

什么是DAG有向无环图

  • DAG(Directed Acyclic Graph)叫做有向无环图,原始的RDD通过一系列的转换就形成了DAG,根据RDD之间依赖关系的不同将DAG划分成不同的Stage(调度阶段)。对于窄依赖,partition的转换处理在一个Stage中完成计算。对于宽依赖,由于有Shuffle的存在,只能在parent RDD处理完成后,才能开始接下来的计算,因此宽依赖是划分Stage的依据。


    sprkDAG.png

划分 DAG stage的依据是什么

宽依赖

DAGScheduler调度器

  • DAGScheduler 把一个Spark作业转换成Stage的DAG(Directed Acyclic Graph有向无环图),根据RDD和Stage之间的关系找出开销最小的调度方法,然后把Stage以TaskSet的形式提交给 TaskScheduler。
  • 总结
    • (1)DAGScheduler对DAG有向无环图进行Stage划分。
    • (2)记录哪个RDD或者 Stage 输出被物化(缓存),通常在一个复杂的shuffle之后,通常物化一下(cache、persist),方便之后的计算。
    • (3)重新提交shuffle输出丢失的stage(stage内部计算出错)给TaskScheduler
    • (4)将 Taskset 传给底层调度器TaskScheduler

TaskScheduler调度器

  • DAGScheduler 决定了运行Task的理想位置,并把这些信息传递给下层的TaskScheduler。此外,DAGScheduler还处理由于Shuffle数据丢失 导致的失败,这有可能需要重新提交运行之前的Stage(非Shuffle数据丢失导致的Task失败由TaskScheduler处理)。 TaskScheduler维护所有TaskSet,当Executor向Driver发送心跳时,TaskScheduler会根据其资源剩余情况分配 相应的Task。另外TaskScheduler还维护着所有Task的运行状态,重试失败的Task。
  • 总结
    • (1)为每一个TaskSet构建一个TaskSetManager 实例管理这个TaskSet 的生命周期
    • (2)数据本地性决定每个Task最佳位置
    • (3)提交 taskset( 一组task) 到集群运行并监控
    • (4)推测执行,碰到计算缓慢任务需要放到别的节点上重试
    • (5)重新提交Shuffle输出丢失的Stage给DAGScheduler
  • 在不同运行模式中任务调度器具体为:
    • Spark on Standalone模式为TaskScheduler;
    • YARN-Client模式为YarnClientClusterScheduler
    • YARN-Cluster模式为YarnClusterScheduler

Attention Please--文章来自互联网资料整理,如有雷同,纯属李小李抄袭,如有侵权请联系删除 From 李小李

你可能感兴趣的:(Spark--Spark DAGScheduler与TaskScheduler调度器)