saprk 核心组件总结
来源:互联网 发布:北京大数据培训班 编辑:程序博客网 时间:2024/05/22 10:22
- DAGScheduler的stage划分算法
执行action时,会通过sparkContext的runJob()触发job(DAGScheduler),从触发action的那个rdd开始,首先为最后一个rdd创建一个stage,然后向前推,如果发现某个RDD是款依赖,那么将宽依赖的那个RDD穿件一个新的stage,那个rdd就是新的stage的最后一个rdd。以此类推。 - 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 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设置。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得输出数据。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写入不同的文件。
- saprk 核心组件总结
- 关于android核心组件Activity的一些总结
- Spring基础特性总结一--核心组件Bean的使用
- ECM六大核心组件
- Struts2-核心组件1
- Struts2-核心组件2
- Struts2-核心组件3
- Struts2-核心组件4
- struts2核心组件介绍
- Ajax核心:XMLHTTP组件
- Ajax 核心组件
- Hibernate框架核心组件
- DBUnit核心组件
- Yii核心应用组件
- extjs核心组件详解
- Extjs-核心组件
- struts2核心组件图示
- struts2 核心组件详解
- 旋转图像
- TCP的三次握手与四次挥手
- STM32高效编程
- Python-模块和包.深入Celery之Beat触发定时/周期性任务
- 经典C语言例题之Linux
- saprk 核心组件总结
- 黑盒测试方法二 (边界值分析)
- 【0002】为电脑重装win10后桌面只有【回收站】,如何添加【我的电脑】快捷方式?
- 自动生成一组新闻
- (七)Tensorflow学习之旅——理解dropout
- SOJ 4190. Prime Palindromes solution
- 区间价值 HihoCoder
- 大数据可视决策的行业应用
- Redis.conf文件描述