saprk 核心组件总结

来源:互联网 发布:北京大数据培训班 编辑:程序博客网 时间:2024/05/22 10:22
  1. DAGScheduler的stage划分算法
    执行action时,会通过sparkContext的runJob()触发job(DAGScheduler),从触发action的那个rdd开始,首先为最后一个rdd创建一个stage,然后向前推,如果发现某个RDD是款依赖,那么将宽依赖的那个RDD穿件一个新的stage,那个rdd就是新的stage的最后一个rdd。以此类推。
  2. DAGScheduler提交stage
    在DAGScheduler的submitStage方法中,stager划分完成后,当一个stage没有父stage时,会调用DAGScheduler的submitMissingTasks方法提交该stage包含tasks。该方法获取task的最佳位置(getPreferredLocs),获取更好的数据本地性。然后序列化task并广播,根据stage的不同类型为每个partition创建不同的task,并封装成taskSet(shuffleMapStage-shuffleMapTask;resultStage-resultTask)
    stage被封装成taskSet,调用taskScheduler的submitTasks提交taskSet
  3. taskscheduler
    taskSetManager负责管理taskSet,跟踪每一个task,如果task失败,负责重试task直到设置的最大次数,然后将taskSetManager加入schedulableBuilder,schedulableBuilder有两种实现方式,FIFOSchedulerBuilder和 FairSchedulerBuilder,默认是FIFO方式,然后根据选取本地化最好的executor执行task。
    FIFOSchedulerBuilder:先进先出
    FairSchedulerBuilder:公平调度,在调度池中为任务分组,配置权重。默认情况下FAIR模式的配置文件是位于SPARK_HOME/conf/fairscheduler.xml文件,也可以通过参数spark.scheduler.allocation.file设置用户自定义配置文件。
    使用哪种调度器由spark.scheduler.mode设置。

  4. task
    executor中,taskRunner运行,接受到了launchtask请求后,首先进行一些准备操作,反序列化task,拉取所需文件jar包,然后运行task的run()方法,task的run方法最核心的调用rdd的iterable方法,针对task对应的rdd的partition,执行算子操作。task分为shufflemaptask和resultTask。
    shufflemaptask在计算完partition数据之后,使用shuffleManager的shuffleWriter,将数据分区之后写入对应的分区文件,之后有一个MapStatus发送给DAGScheduler(MapOutputTracker)。
    resultTask,针对shuffleMapTask的输出,执行shuffle操作,回去DAGScheduler(MapOutputTracker)拉取shuffleMapTask得输出数据。

  5. shuffle
    普通shuffle操作,每个shuffleMapTask会为每个resultTask创建一份bucker缓存,以及对应的shuffleBlockFile磁盘文件。shuffleMapTask会将MapStatus发送到DAGScheduler,MapStatus包含每个ResultTask需要拉取的数据大小。map端的数据可理解为shuffle的第一个rdd,MapPartitionsRDD。resultTask会去MapOutputT获取自己所需拉取的文件信息,然后通过blockManager将数据拉取过来。每个ResultTask拉取过来的数据,内部RDD叫做shuffledRDD,优先写入缓存,缓存不够写入磁盘。每个ResultTask针对数据聚合,生成MapPartitionsRDD
    开启consolidation机制后,引入的shuffleGroup,每个shuffleMapTask将数据写入ResultTask数量的本地文件,当下一个shuffleMapTask运行时,将数据直接写入之前的shuffleMapTask的本地文件,相当于对多个shuffleMapTask的数据进行合并,大大减少本地磁盘数量。并行执行的shuffleMapTask写入不同的文件。

原创粉丝点击