1、 任务调度

     a、RDD Objects---->转换为DAG有向无环图

     b、DAGScheduler---根据RDD之间的宽窄依赖切分Job,切分为Stage

     c、Stage本质上就是---TaskSet,Stage就会以TaskSet形式传给TaskScheduler

     d、TaskScheduler遍历TaskSet,分配给executor执行

        |如果说executor中task执行失败,跟TaskScheduler申请重试3次,3次仍然失败

DAGScheduler重试重新发送TaskSet,默认会重试4次。如果仍然失败,宣告Stage执行失败

,也就是包含Stage的job宣告执行失败。

     e、推测执行---表示一个spark job中,可能会存在某一些task执行缓慢,推测会启动

一个相同的task,选择先执行完的作为结果

        |推测执行在spark中默认是关闭的

  1、可能出现数据重复写入

  2、集群奔溃。数据倾斜--task本身计算量大,耗时较长

  2、spark的资源调度流程

    master:管理整个集群的资源

    Worker:每启动一个Worker都注册在Master上

  a、当提交spark的程序时,main会创建driver进程

          当执行到val sc=new SparkContext()---会默认创建两个对象DAGScheduler、

   TaskScheduler对象。

  b、TaskScheduler向Master发送一个请求,申请程序运行需要资源

  c、maste根据TaskScheduler发送的请求,去每一个worker上查看其资源使用情况,

  给资源充足的worker上发送一条信息。让其创建一个executor进程,是一个线程池

  用来执行每一个task

  d、所有的executor都向TaskScheduler反向注册,TaskScheduler中一个executor列表

  e、任务调度---DAGScheduler切分job---分发TaskSet TaskScheduler

  f、TaskScheduler遍历TaskSet,把每一个task分发最优的executor执行

     注意:如果task执行失败,向TaskScheduler...(任务调度)

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-08-21
  • 2021-09-17
  • 2021-05-26
  • 2020-01-04
  • 2021-07-30
  • 2022-12-23
猜你喜欢
  • 2021-08-31
  • 2021-04-10
  • 2021-11-12
  • 2022-01-03
  • 2021-07-09
  • 2021-11-19
  • 2021-08-13
相关资源
相似解决方案