spark源码分析
spark源码分析
威少SOS
改变从这里开始
展开
-
重写 AccumulatorParam 计时器
一:重点方法zeroaddInPlaceaddAccumulator作用:作为Spark自己封装的计数器,可以免去我们考虑分布式中出现的数据一致等问题,比较方便。二:代码重写类:package com.TomYang.sparkProject.spark.session;import org.apache.spark.AccumulatorParam;imp...原创 2019-08-28 01:11:24 · 5314 阅读 · 0 评论 -
SparkContext初始化机制
目录零:初始触发一:TaskSchedule初始化(宏观)二:DAGScheduler初始化(宏观)三:SparkUI四:源码解析五:重点问题零:初始触发位置:org.apache.spark.SparkContext.scala初始化代码:val conf = new SparkConf().setAppName("WordCount");val sc...原创 2019-05-29 20:14:45 · 1917 阅读 · 0 评论 -
Shuffle 原理剖析
传统原理:Map端:(1)每个ShuffleMapTask都会为每个ResultTask创建一份 bucket 缓存以及对应的 ShuffleBlockFile磁盘文件(2)ShuffleMapTask的输出会封装成 MapStatus 发送到DAGScheduler的MapOutputTrackerMaster中(3)每个MapStatus包含了每个ResultTask要拉取的数...原创 2019-05-24 01:07:05 · 267 阅读 · 0 评论 -
Worker启动Driver&&Executor
目录1.Driver启动2.Executor启动3.源码分析:org.apach.spark.deploy.worker.Worker.scala4.关键问题1.Driver启动(1)Master 对Worker 发送 LaunchDriver 命令(2)Worker节点创建DriverRunner对象,它内部启动一个线程,用于创建Driver的工作目录(3...原创 2019-05-18 01:20:42 · 335 阅读 · 0 评论 -
Task 源码分析
1.Executor做好准备操作:反序列化Task,通过网络拉取所需要的文件,jar包2.Executor 运行 Task 的run() 方法3.调用RDD的iterator() 方法,针对Task所对应的 rdd 的partition,执行自定义的Function算子4.针对 ShuffleMapTask时, 计算之后,会使用 (1)ShuffleManager的ShuffleW...原创 2019-05-23 01:05:29 · 216 阅读 · 0 评论 -
Checkpoint的原理剖析
作用:Spark的容错机制,避免重新计算数据1.如何进行checkpoint?SparkContext.setCheckpointDir()RDD.checkpoint()具体转变:对RDD调用checkpoint()方法之后,它就接受了RDDCheckpointData对象的管理RDDCheckpointData对象会负责将调用了checkPoint()方法的RDD的状态设置为...原创 2019-05-27 00:46:12 · 1613 阅读 · 0 评论 -
CacheManager原理剖析
前景:Task ——》 RDD(iterator方法) ——》计算当前Task要计算出来的那个partition情景1:该RDD是持久化过的:那么StorageLevel肯定不是NONE,则会使用CacheManager去帮助我们直接读取持久化过的数据 情景1.1:BlockManager,先尝试从本地读取(getLocal),或从远程获取(getRemote) 情景1.2:...原创 2019-05-26 01:11:36 · 456 阅读 · 0 评论 -
Master主备切换机制
目录1.含义2.完成过程3.Master.scala => completeRecovery()分析4.重点方法5.清理机制汇总1.含义实际指Master的切换,将出故障的 Active Master 替换为 StandBy Master2.完成过程(1)(抢救,复用之前的数据)使用持久化引擎读取持久化的storedApps,storeDriver...原创 2019-05-12 21:49:38 · 1969 阅读 · 0 评论 -
Executor源码分析
一:executor 注册机制1.worker为application启动的Executor进程是 CoarseGrainedexecutorbackend 2.actor的初始化方法prestart()(1)获取driver的actor(2)向driver发送RegisterExecutor消息,进行反向注册(3)driver注册成功executor后,返回消息被 Registe...原创 2019-05-22 00:48:15 · 220 阅读 · 0 评论 -
Master状态改变处理机制
目录一:源码分析二:重点概览三:各组件完成后的清除工作本质:在Application完成后,出现其它故障等原因,Master对 Driver,Executor,Application进行状态更新一:源码分析org.apache.spark.deploy.master.Master.scala(见下图)1>case DriverStateChanged(d...原创 2019-05-16 17:32:53 · 317 阅读 · 0 评论 -
BlockManager原理
Driver中的Block:Driver > DAGScheduler > BlockManagerMaster > BlockManagerInfo > BlockStatusBlockManagerMaster位置:存在于Driver上功能:负责对各个节点上的BlockManager内部管理的数据的元数据进行维护例如:block的增删改等操作,都会在此维...原创 2019-05-25 00:28:38 · 435 阅读 · 0 评论 -
Master的注册机制
目录1.Driver向Master注册 2.Application注册3.Worker节点注册4.注册机制汇总5.源码分析6.注册机制中的组件交互问题1.Driver向Master注册 Master启动Driver进程,放入Master的内存缓存结构中加入等待调度的 ArrayBuffer队列用持久化引擎将Driver信息持久化调用sche...原创 2019-05-16 00:46:48 · 1585 阅读 · 0 评论 -
TASKScheduler源码分析
(1)***org.apach.spark.scheduler.DAGScheduler.scalahandleJobSubmitted()submitStage()submitMissingTasks()存在 stage.isShuffleMap 判断非 shuffle 情况将 job 进行序列化为 taskBinarytaskBinary = sc.broadcas...原创 2019-05-20 23:27:39 · 198 阅读 · 0 评论 -
Master资源调度算法
目录一:Driver 被分配算法二:Application 被分配算法三:重点方法四:调度算法中的组件关系一:Driver 被分配算法Master.scala => scheduler()(1)判断Master状态是否为 RecoveryState.ALIVE(2)获取workers集合中状态为ALIVE的Worker,并进行Random.shuffle...原创 2019-05-15 00:26:39 · 1542 阅读 · 0 评论 -
DAGScheduler 源码分析
图谱:(以wordCount为例)实际文字描述 RDD的包含关系特殊点:存在一个方法会被划分在两个stage里面重点方法org.apach.spark.scheduler.DAGScheduler.scalaDAGSchedulerEventProcessLoog()submitStage()submitWatingStages()stage之间的关系:层层嵌套关系...原创 2019-05-19 22:04:04 · 193 阅读 · 0 评论 -
job 触发源码分析
基础 wordCount.scala 小应用(1)val lines = sc.textFile()(2)val words = lines.flatMap(line => line.split(" "))(3)val pairs = words.map(word => (word, 1))(4)val counts = pairs.reduceByKey(_ + _)(5...原创 2019-05-18 23:32:18 · 169 阅读 · 0 评论 -
SparkContext内核架构深度剖析
目录一:Spark的核心运转分析二:重点的算法提要三:核心对象的从属关系四:图表一:Spark的核心运转分析1.spark-submit 提交 Application 到 Driver 上执行2.设置 SparkConf , 初始化 SparkContext ,SparkContext 建立 DAGScheduler 和 TaskScheduler3.Tas...原创 2019-04-26 23:43:14 · 2420 阅读 · 0 评论
分享