![](https://img-blog.csdnimg.cn/00ed17ef51cc43bbb59045bd79e03c0e.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
bigdatav018——spark.v003
BigDataSpark.v03
yanqi_vip
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 life.It sinks, and I am ready to depart ——W.S.Landor
展开
-
CC00075.spark——|Hadoop&Spark.V01|——|Spark.v01|Spark 原理 源码|Spark Runtime|
一、Spark 原理### --- Spark 原理主要包括 :~~~ 核心组件的运行机制(Master、Worker、SparkContext等)~~~ 任务调度的原理~~~ Shuffle原理~~~ 内存管理~~~ 数据倾斜处理~~~ Spark优化~~~ 熟练掌握 Spark 内核原理,能够帮助我们更好地完...原创 2022-04-12 13:41:00 · 85 阅读 · 0 评论 -
CC00076.spark——|Hadoop&Spark.V02|——|Spark.v02|Spark 原理 源码|Master Worker解析|
一、Master & Worker 解析### --- Spark RPC 框架~~~ RPC(Remote Procedure Call)远程过程调用。~~~ 两台服务器A、B,A服务器上的应用,想要调用B服务器上应用提供的函数/方法,~~~ 由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。~~~ ...原创 2022-04-12 13:41:00 · 66 阅读 · 0 评论 -
CC00077.spark——|Hadoop&Spark.V03|——|Spark.v03|Spark 原理 源码|Master Worker解析|
一、Master 启动流程### --- Master启动流程~~~ Master是RpcEndpoint,实现了 RpcEndpoint 接口~~~ Master的生命周期遵循 constructor -> onStart -> receive* -> onStop 的步骤~~~ Master 的 onStart 方法中最重要的事情...原创 2022-04-12 13:42:00 · 154 阅读 · 0 评论 -
CC00078.spark——|Hadoop&Spark.V04|——|Spark.v04|Spark 原理 源码|Master Worker解析|
一、Master Worker解析### --- 源码提取说明:Worker启动流程~~~ # 源码提取说明:Worker.scala~~~ # 18行~90行package org.apache.spark.deploy.workerprivate[deploy] class Worker( o...原创 2022-04-12 13:43:00 · 61 阅读 · 0 评论 -
CC00079.spark——|Hadoop&Spark.V05|——|Spark.v05|Spark 原理 源码|Master Worker解析&模拟程序|
一、模拟程序### --- 编程代码实现:package org.apache.spark.deployimport java.text.SimpleDateFormatimport java.util.{Date, Locale}import java.util.concurrent.TimeUnitimport org.apache.spark.{SecurityM...原创 2022-04-12 13:43:00 · 57 阅读 · 0 评论 -
CC00080.spark——|Hadoop&Spark.V06|——|Spark.v06|Spark 原理 源码|Spark Context|
一、SparkContext### --- SparkContext内部组件~~~ Spark应用程序的第一步就是创建并初始化SparkContext,~~~ SparkContext的初始化过程包含了内部组件的创建和准备,~~~ 主要涉及网络通信、分布式、消息、存储、计算、调度、缓存、度量、清理、文件服务和UI等方面。~~~ SparkCo...原创 2022-04-12 13:43:00 · 64 阅读 · 0 评论 -
CC00081.spark——|Hadoop&Spark.V07|——|Spark.v07|Spark 原理 源码|Spark Context|
一、Spark Env内部组件### --- SparkEnv内部组件~~~ SparkEnv是spark计算层的基石,不管是 Driver 还是 Executor,~~~ 都需要依赖SparkEnv来进行计算,它是Spark的执行环境对象,~~~ 其中包括与众多Executor执行相关的对象。~~~ Spark 对任务的计算都依托于 Exe...原创 2022-04-12 13:44:00 · 54 阅读 · 0 评论 -
CC00082.spark——|Hadoop&Spark.V08|——|Spark.v08|Spark 原理 源码|Spark Context|
一、SparkContext启动流程### --- sparkContext启动流程~~~ SparkContext 涉及到的组件多,源码比较庞大。~~~ 有些边缘性的模块主要起到辅助的功能,暂时省略。~~~ 本文主要关心 SparkContext整体启动流程、三大组件的启动。~~~ 初始化部分的代码主要集中在 363 - 592 行(Spa...原创 2022-04-12 13:44:00 · 81 阅读 · 0 评论 -
CC00083.spark——|Hadoop&Spark.V09|——|Spark.v09|Spark 原理 源码|Spark Context|
一、三大组件启动流程### --- 三大组件启动流程~~~ DAGScheduler(高层调度器,class):~~~ 负责将 DAG 拆分成不同Stage的具有依赖关系(包含RDD的依赖关系)的多批任务,~~~ 然后提交给TaskScheduler进行具体处理~~~ TaskScheduler(底层调度器,trait,只有一种实现Tas...原创 2022-04-12 13:45:00 · 81 阅读 · 0 评论 -
CC00084.spark——|BigDataEnd|
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 life.It sinks, and I am ready to depart ...原创 2022-04-12 13:46:00 · 51 阅读 · 0 评论 -
CC00085.spark——|Hadoop&Spark.V01|——|Spark.v01|Spark 原理 源码|作业执行原理&任务调度概述|
一、作业执行原理### --- 任务调度概述~~~ 再次简要回顾 Spark 中的几个重要概念:~~~ Job 是以 Action 方法为界,遇到一个 Action 方法则触发一个 Job~~~ Stage 是 Job 的子集,以 RDD 宽依赖(即 Shuffle)为界,遇到 Shuffle 做一次划分。### --- Stage有两个具体...原创 2022-04-12 13:47:00 · 55 阅读 · 0 评论 -
CC00086.spark——|Hadoop&Spark.V02|——|Spark.v02|Spark 原理 源码|作业执行原理&job触发|
一、作业执行原理### --- job触发~~~ Action 操作后会触发 Job 的计算,并交给 DAGScheduler 来提交。二、作业执行原理### --- 作业执行原理~~~ Action 触发 sc.runJob~~~ 触发 dagScheduler.runJob~~~ spark.logLi...原创 2022-04-12 13:47:00 · 61 阅读 · 0 评论 -
CC00087.spark——|Hadoop&Spark.V03|——|Spark.v03|Spark 原理 源码|作业执行原理&Stage划分|
一、Stage划分### --- Stage划分~~~ Spark的任务调度从 DAG 划分开始,由 DAGScheduler 完成~~~ DAGScheduler 根据 RDD 的血缘关系构成的 DAG 进行切分,将一个Job划分为若干Stages,~~~ 具体划分策略是:从最后一个RDD开始,~~~ 通过回溯依赖判断父依赖是否是宽依赖(即...原创 2022-04-12 13:48:00 · 66 阅读 · 0 评论 -
CC00088.spark——|Hadoop&Spark.V04|——|Spark.v04|Spark 原理 源码|作业执行原理&Stage划分|
一、stage划分### --- dagScheduler.submit 发送消息~~~ # 源码提取说明:DAGScheduler.scala~~~ # 676行~703行 def submitJob[T, U]( rdd: RDD[T], func: (TaskContext, Iterator[T]) => U, part...原创 2022-04-12 13:48:00 · 52 阅读 · 0 评论 -
CC00089.spark——|Hadoop&Spark.V05|——|Spark.v05|Spark 原理 源码|作业执行原理&Stage划分|
一、Stage划分### --- 调用 dagScheduler.handleJobSubmitted~~~ # 源码提取说明:DAGScheduler.scala~~~ # 952行~1015行 // 处理Job的提交 private[scheduler] def handleJobSubmitted( jobId: Int, f...原创 2022-04-12 13:49:00 · 43 阅读 · 0 评论 -
CC00090.spark——|Hadoop&Spark.V06|——|Spark.v06|Spark 原理 源码|作业执行原理&Stage划分|
一、Stage划分### --- handleJobSubmitted => createResultStage~~~ # 源码提取说明:~~~ # 440行~522行 private def createResultStage( rdd: RDD[_], func: (TaskContext, Iterator[_]) =>...原创 2022-04-12 13:49:00 · 46 阅读 · 0 评论 -
CC00091.spark——|Hadoop&Spark.V07|——|Spark.v07|Spark 原理 源码|作业执行原理&Stage划分|
一、Stage划分### --- 提交ResultStage~~~ submitStage 方法会通过入参 ResultStage 逐层获取父stage,~~~ 再从最上游stage开始逐步调用TaskScheduler.submitTasks 方法提交task集合,~~~ 最后才提交ResultStage的task集合。~~~ 先调用g...原创 2022-04-12 13:50:00 · 66 阅读 · 0 评论 -
CC00092.spark——|Hadoop&Spark.V08|——|Spark.v08|Spark 原理 源码|作业执行原理&Stage划分|
一、Stage划分### --- 提交 Task~~~ 得到RDD中需要计算的partition~~~ 对于Shuffle类型的stage,需要判断stage中是否缓存了该结果;~~~ 对于Result类型的Final Stage,则判断计算Job中该partition是否已经计算完成。~~~ 这么做(没有直接提交全部tasks)的原因是...原创 2022-04-12 13:51:00 · 241 阅读 · 0 评论 -
CC00093.spark——|Hadoop&Spark.V09|——|Spark.v09|Spark 原理 源码|作业执行原理&Task调度|
一、Task调度### --- Task调度### --- TaskSetManager 结构如下图所示:~~~ Task 的调度是由 TaskScheduler 来完成(底层调度)。~~~ DAGScheduler 将 Stage 打包到 TaskSet 交给TaskScheduler,~~~ TaskScheduler 会将 TaskSet ...原创 2022-04-12 13:51:00 · 84 阅读 · 0 评论 -
CC00094.spark——|Hadoop&Spark.V10|——|Spark.v10|Spark 原理 源码|作业执行原理&调度策略|
一、作业执行原理### --- 调度策略~~~ TaskScheduler会先把 DAGScheduler 给过来的 TaskSet 封装成 TaskSetManager 扔到任务队列里,~~~ 然后再从任务队列里按照一定规则把它们取出来,由 SchedulerBackend 发送给Executor运行;### --- TaskSch...原创 2022-04-12 13:51:00 · 54 阅读 · 0 评论 -
CC00095.spark——|Hadoop&Spark.V11|——|Spark.v11|Spark 原理 源码|作业执行原理&本地化调度&返回结果|
一、本地化调度### --- 本地化调度~~~ DAGScheduler切割Job,划分Stage。~~~ 调用submitStage来提交一个Stage对应的tasks,submitStage会调用submitMissingTasks,~~~ submitMissingTasks 确定每个需要计算的 task 的 preferred Locati...原创 2022-04-12 13:52:00 · 66 阅读 · 0 评论 -
CC00096.spark——|Hadoop&Spark.V12|——|Spark.v12|Spark 原理 源码|Shuffle详解|
一、Shuffle详解### --- shuffle详解~~~ 在 Spark 或 MapReduce 分布式计算框架中,数据被分成一块一块的分区,~~~ 分布在集群中各节点上,每个计算任务一次处理一个分区,~~~ 当需要对具有某种共同特征的一类数据进行计算时,就需要将集群中的这类数据汇聚到同一节点。~~~ 这个按照一定的规则对数据重新分区的...原创 2022-04-12 13:53:00 · 74 阅读 · 0 评论 -
CC00097.spark——|Hadoop&Spark.V13|——|Spark.v13|Spark 原理 源码|Shuffle详解|
一、Hash Shuffle V1### --- Hash Shuffle V1~~~ 相对于传统的 MapReduce,~~~ Spark 假定大多数情况下 Shuffle 的数据不需要排序,强制排序反而会降低性能。~~~ 因此不在 Shuffle Read 时做 Merge Sort,如果需要合并的操作的话,则会使用聚合(agggregator),...原创 2022-04-12 13:53:00 · 53 阅读 · 0 评论 -
CC00098.spark——|Hadoop&Spark.V14|——|Spark.v14|Spark 原理 源码|Shuffle详解|
一、Sort Shuffle V1### --- Sort Shuffle V1~~~ 为了更好地解决上面的问题,Spark 参考了 MapReduce 中 Shuffle 的处理方式,~~~ 引入基于排序的 Shuffle 写操作机制。~~~ 每个 Task 不会为后续的每个 Task 创建单独的文件,而是将所有对结果写入同一个文件。~~~ ...原创 2022-04-12 13:53:00 · 60 阅读 · 0 评论 -
CC00099.spark——|Hadoop&Spark.V15|——|Spark.v15|Spark 原理 源码|Shuffle详解|
一、Shuffle Writer### --- Shuffle Writer:ShuffleWriter(抽象类),有3个具体的实现:~~~ SortShuffleWriter。sortShulleWriter 需要在 Map 排序~~~ UnsafeShuffleWriter。使用 Java Unsafe 直接操作内存,~~~ 避免Java对象多余的...原创 2022-04-12 13:54:00 · 82 阅读 · 0 评论 -
CC00101.spark——|Hadoop&Spark.V16|——|Spark.v16|Spark 原理 源码|Shuffle详解|
一、Hadoop Shuffle 与 Spark Shuffle 的区别### --- 共同点:~~~ 二者从功能上看是相似的;从High Level来看,没有本质区别,实现(细节)上有区别### --- 实现上的区别:~~~ Hadoop中有一个Map完成,Reduce便可以去fetch数据了,不必等到所有Map任务完成;~~~ 而Spark...原创 2022-04-12 13:54:00 · 48 阅读 · 0 评论 -
CC00102.spark——|BigDataEnd|
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 life.It sinks, and I am ready to depart ...原创 2022-04-12 13:55:00 · 56 阅读 · 0 评论 -
CC00103.spark——|Hadoop&Spark.V01|——|Spark.v01|Spark 原理 源码|内存管理&堆内内存与堆外内存|
一、内存管理### --- 内存管理~~~ 在执行 Spark 的应用程序时,Spark 集群会启动 Driver 和 Executor 两种 JVM 进程:~~~ Driver为主控进程,负责创建 Spark 上下文,提交 Spark 作业,将作业转化为 Task,~~~ 并在各个 Executor 进程间协调任务的调度~~~ Execut...原创 2022-04-12 13:56:00 · 216 阅读 · 0 评论 -
CC00104.spark——|Hadoop&Spark.V02|——|Spark.v02|Spark 原理 源码|内存管理&静态内存管理&统一内存管理|
一、静态内存管理### --- 静态内存管理### --- 静态内存架构~~~ Spark 2.0 以前版本采用静态内存管理机制。存储内存、~~~ 执行内存和其他内存的大小在 Spark 应用程序运行期间均为固定的,~~~ 但用户可以应用程序启动前进行配置,堆内内存的分配如下图所示:### --- 静态内存管理~~~ 可用...原创 2022-04-12 13:56:00 · 235 阅读 · 0 评论 -
CC00105.spark——|Hadoop&Spark.V03|——|Spark.v03|Spark 原理 源码|内存管理&存储内存管理|
一、存储内存管理### --- 存储内存管理~~~ 堆内内存:系统保留(300M)、Other、存储内存、执行内存~~~ 堆外内存:存储内存、执行内存~~~ 存储内存:RDD缓存的数据 & 共享变量~~~ RDD的持久化~~~ RDD缓存的过程~~~ 淘汰与落盘二、RDD 持久化机制### ...原创 2022-04-13 14:38:00 · 208 阅读 · 0 评论 -
CC00106.spark——|Hadoop&Spark.V04|——|Spark.v04|Spark 原理 源码|内存管理&执行内存管理|
一、执行内存管理### --- 执行内存管理~~~ 执行内存主要用来存储任务在执行 Shuffle 时占用的内存,~~~ Shuffle 是按照一定规则对 RDD 数据重新分区的过程,~~~ Shuffle 的 Write 和 Read 两阶段对执行内存的使用:### --- Shuffle Write~~~ 在 map 端会采用 E...原创 2022-04-13 14:39:00 · 193 阅读 · 0 评论 -
CC00107.spark——|Hadoop&Spark.V05|——|Spark.v05|Spark 原理 源码|BlockManager|
一、BlockManager### --- BlockManager~~~ BlockManager是一个嵌入在 Spark 中的 key-value型分布式存储系统,也是 Master-Slave 结构的,~~~ RDD-cache、shuffle-output、broadcast 等的实现都是基于BlockManager来实现的:~~~ shuff...原创 2022-04-13 14:40:00 · 56 阅读 · 0 评论 -
CC00108.spark——|Hadoop&Spark.V06|——|Spark.v06|Spark 原理 源码|数据倾斜&基本概念|
一、数据倾斜### --- 基本概念~~~ 这是我们期望的处理模式:### --- 什么是数据倾斜~~~ Task之间数据分配的非常不均匀~~~ key.hashCode % reduce个数 = 分区号### --- 数据倾斜有哪些现象~~~ Executor lost、OOM、Shuffle过程...原创 2022-04-13 14:40:00 · 59 阅读 · 0 评论 -
CC00109.spark——|Hadoop&Spark.V07|——|Spark.v07|Spark 原理 源码|数据倾斜&数据倾斜处理|
一、数据倾斜处理### --- 做好数据预处理:~~~ 过滤key中的空值~~~ 消除数据源带来的数据倾斜(文件采用可切分的压缩方式)~~~ 数据倾斜产生的主要原因:Shuffle + key分布不均### --- 处理数据倾斜的基本思路:~~~ 消除shuffle~~~ 减少shuffle过程中传输的数据~~~ ...原创 2022-04-13 14:40:00 · 88 阅读 · 0 评论 -
CC00110.spark——|Hadoop&Spark.V08|——|Spark.v08|Spark 原理 源码|Spark优化|
一、Spark优化### --- 编码优化:~~~ ① RDD复用~~~ ② RDD持久化~~~ ③ 巧用 filter~~~ ④ 选择高性能算子~~~ ⑤ 设置合并的并行度~~~ ⑥ 广播大变量~~~ ⑦ Kryo序列化~~~ ⑧ 多使用Spark SQL~~~ ⑨ 优化数据结构~~~ ...原创 2022-04-13 14:41:00 · 63 阅读 · 0 评论