摘要:一、Stage划分 ### 提交ResultStage ~~~ submitStage 方法会通过入参 ResultStage 逐层获取父stage, ~~~ 再从最上游stage开始逐步调用TaskScheduler.submitTasks 方法提交task集合, ~~~ 最后才提交ResultS
阅读全文
摘要:一、Stage划分 ### 调用 dagScheduler.handleJobSubmitted ~~~ # 源码提取说明:DAGScheduler.scala ~~~ # 952行~1015行 // 处理Job的提交 private[scheduler] def handleJobSubmitte
阅读全文
摘要:一、Stage划分 ### handleJobSubmitted => createResultStage ~~~ # 源码提取说明: ~~~ # 440行~522行 private def createResultStage( rdd: RDD[_], func: (TaskContext, It
阅读全文
摘要:一、Stage划分 ### Stage划分 ~~~ Spark的任务调度从 DAG 划分开始,由 DAGScheduler 完成 ~~~ DAGScheduler 根据 RDD 的血缘关系构成的 DAG 进行切分,将一个Job划分为若干Stages, ~~~ 具体划分策略是:从最后一个RDD开始,
阅读全文
摘要:一、stage划分 ### dagScheduler.submit 发送消息 ~~~ # 源码提取说明:DAGScheduler.scala ~~~ # 676行~703行 def submitJob[T, U]( rdd: RDD[T], func: (TaskContext, Iterator[
阅读全文
摘要:一、作业执行原理 ### 任务调度概述 ~~~ 再次简要回顾 Spark 中的几个重要概念: ~~~ Job 是以 Action 方法为界,遇到一个 Action 方法则触发一个 Job ~~~ Stage 是 Job 的子集,以 RDD 宽依赖(即 Shuffle)为界,遇到 Shuffle 做一
阅读全文
摘要:一、作业执行原理 ### job触发 ~~~ Action 操作后会触发 Job 的计算,并交给 DAGScheduler 来提交。 二、作业执行原理 ### 作业执行原理 ~~~ Action 触发 sc.runJob ~~~ 触发 dagScheduler.runJob ~~~ spark.lo
阅读全文
摘要:NO: Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of
阅读全文
摘要:一、三大组件启动流程 ### 三大组件启动流程 ~~~ DAGScheduler(高层调度器,class): ~~~ 负责将 DAG 拆分成不同Stage的具有依赖关系(包含RDD的依赖关系)的多批任务, ~~~ 然后提交给TaskScheduler进行具体处理 ~~~ TaskScheduler(
阅读全文
摘要:一、SparkContext启动流程 ### sparkContext启动流程 ~~~ SparkContext 涉及到的组件多,源码比较庞大。 ~~~ 有些边缘性的模块主要起到辅助的功能,暂时省略。 ~~~ 本文主要关心 SparkContext整体启动流程、三大组件的启动。 ~~~ 初始化部分的
阅读全文
摘要:一、Spark Env内部组件 ### SparkEnv内部组件 ~~~ SparkEnv是spark计算层的基石,不管是 Driver 还是 Executor, ~~~ 都需要依赖SparkEnv来进行计算,它是Spark的执行环境对象, ~~~ 其中包括与众多Executor执行相关的对象。 ~
阅读全文
摘要:一、Master Worker解析 ### 源码提取说明:Worker启动流程 ~~~ # 源码提取说明:Worker.scala ~~~ # 18行~90行 package org.apache.spark.deploy.worker private[deploy] class Worker( o
阅读全文
摘要:一、模拟程序 ### 编程代码实现: package org.apache.spark.deploy import java.text.SimpleDateFormat import java.util.{Date, Locale} import java.util.concurrent.TimeU
阅读全文
摘要:一、SparkContext ### SparkContext内部组件 ~~~ Spark应用程序的第一步就是创建并初始化SparkContext, ~~~ SparkContext的初始化过程包含了内部组件的创建和准备, ~~~ 主要涉及网络通信、分布式、消息、存储、计算、调度、缓存、度量、清理、
阅读全文
摘要:一、Master 启动流程 ### Master启动流程 ~~~ Master是RpcEndpoint,实现了 RpcEndpoint 接口 ~~~ Master的生命周期遵循 constructor -> onStart -> receive* -> onStop 的步骤 ~~~ Master 的
阅读全文
摘要:一、Spark 原理 ### Spark 原理主要包括 : ~~~ 核心组件的运行机制(Master、Worker、SparkContext等) ~~~ 任务调度的原理 ~~~ Shuffle原理 ~~~ 内存管理 ~~~ 数据倾斜处理 ~~~ Spark优化 ~~~ 熟练掌握 Spark 内核原理
阅读全文
摘要:一、Master & Worker 解析 ### Spark RPC 框架 ~~~ RPC(Remote Procedure Call)远程过程调用。 ~~~ 两台服务器A、B,A服务器上的应用,想要调用B服务器上应用提供的函数/方法, ~~~ 由于不在一个内存空间,不能直接调用,需要通过网络来表达
阅读全文
摘要:NO: Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of
阅读全文