
Spark2.3.2源码解析
文章平均质量分 91
Spark知识整理
张伯毅
某厂技术,Apache DolphinScheduler Committer.
专注于调度&实时&大数据体系~
展开
-
Spark Shuffle机制-源码实现
.一 .前言二 .Shuffle Write框架设计和实现2.1. BypassMergeSortShuffleWriter2.2. UnsafeShuffleWriter2.3. SortShuffleWriter三 . 输出文件验证3.1. 通用验证代码3.1.1 验证代码3.1.2 断点入口 : org.apache.spark.scheduler.ShuffleMapTask # runTask3.2. SortShuffleWriter3.2.1 入口, 获取SortShuffleManager3原创 2021-07-19 21:49:02 · 1529 阅读 · 6 评论 -
Spark Executor内存图解
.一 .前言二 .拆解2.1. 总体2.2. Executor Memory 划分2.3. 动态占用机制2.4. 任务内存管理(Task Memory Manager)三 . 一个示例3.1. 只用了堆内内存3.2.用了堆内和堆外内存四 .Executor内存参数调优4.1. Executor JVM Used Memory Heuristic4.2. Executor Unified Memory Heuristic4.3. Executor OOM类错误 (错误代码 137、143等)4.4. Exec翻译 2021-05-29 19:28:06 · 594 阅读 · 0 评论 -
SparkShuffle机制 - ⽀持⾼效聚合和排序的数据结构
.一 .前言二 .AppendOnlyMap的原理三 .ExternalAppendOnlyMap3.1. 如何获知当前AppendOnlyMap的⼤⼩?因为AppendOnlyMap中不断添加和更新record,其⼤⼩是动态变化的,什么时候会超过内存界限是难以确定的。3.2. 如何设计spill的⽂件结构,使得可以⽀持⾼效的全局聚合?3.3. 怎样进⾏全局聚合?四 .PartitionedAppendOnlyMap五 .PartitionedPairBuffer六 . 与Hadoop MapReduce的翻译 2021-07-04 15:52:45 · 856 阅读 · 0 评论 -
SparkShuffle机制-概念
.一 .前言二 .Shuffle的设计思想2.1. 解决数据分区问题2.2. 解决数据聚合问题2.3. 解决map()端combine问题2.4. 解决sort问题2.5. 解决内存不⾜问题2.6. Spark中Shuffle框架的设计三 .Shuffle Write框架设计和实现3.1. 不需要map()端聚合(combine)和排序3.2. 不需要map()端聚合(combine),但需要排序。3.3. 需要map()端聚合(combine),需要或者不需要按Key进⾏排序四 .Shuffle Rea翻译 2021-07-04 15:52:15 · 629 阅读 · 0 评论 -
Spark2.3.2源码解析 [目录]
Spark基础知识详解Spark2.1 内存管理详解Spark2.3.2源码分析:1.代码阅读环境准备Spark2.3.2源码解析: 2.启动master节点流程源码分析Spark2.3.2源码解析: 3.启动worker节点启动流程源码分析Spark2.3.2源码解析: 4.1.Yarn cluster 模式 SparkSubmit源码分析(一)Spark2.3.2源码解析: 4.2.Yarn cluster 模式 SparkSubmit源码分析(二)ApplicationMasterSpa原创 2021-01-12 20:32:47 · 2462 阅读 · 0 评论 -
Spark2.3.2源码解析: 4.3.Yarn cluster 模式 Executor 注册/启动源码 分析
本文章与前两篇文章有衔接性, 想知道为什么从此处代码开始的话,请查阅前两篇文章:Spark2.3.2源码解析: 4.1.Yarn cluster 模式 SparkSubmit源码分析(一)https://blog.csdn.net/zhanglong_4444/article/details/84875818Spark2.3.2源码解析: 4.2.Yarn clust...原创 2019-02-22 17:45:36 · 3193 阅读 · 0 评论 -
两个数据进行过滤,广播map 数据与 join 操作 性能对比
主要测试两种情况1.将 rdd 转换为 map 广播, 与另外集合rdd 进行匹配2.将 rdd 与 rdd 进行连表 , 过滤数据. 时间单位(毫秒) 10万 100万 500万 1000万 广播map 过滤 4 8 22 47 rdd join 过滤 50 92 175 279 ...原创 2019-02-15 17:59:46 · 8774 阅读 · 0 评论 -
Spark 算子 : groupByKey 和 collectAsMap 配合使用运行时间与结果测评
在看代码的时候,发现同事在用 将数据转换为 map 之前,加了一个 groupByKey , 觉得这样并不靠谱,所以写了一段代码进行验证. 结果如下: (无论哪种方式, 数据是一样的 !!! 使用groupByKey 会慢 很多 ) 情况1: 随机生成 指定条数的数据, 无重复 key , 查看运行时间与结果 (时间单位 毫秒) 1W 5W 10W...原创 2019-02-15 15:46:14 · 7400 阅读 · 0 评论 -
Spark 算子 : distinct 和 collectAsMap 配合使用运行时间与结果测评
在看代码的时候,发现同事在用 将数据转换为 map 之前,加了一个 distinct , 觉得这样并不靠谱,所以写了一段代码进行验证. 结果如下: (无论哪种方式, 数据是一样的 !!! 使用distinct 会慢 很多 ) 情况1: 随机生成 指定条数的数据, 无重复 key , 查看运行时间与结果 (时间单位 毫秒) 1W 5W 10W...原创 2019-02-15 15:21:36 · 7894 阅读 · 0 评论 -
Spark2.3.2源码解析: 11. collectAsMap 源码解析& 性能测试
本文主要是为了认识collectAsMap 的源码, 以及在使用的时候性能。对其性能方面做一个直观的理解 /** * Return the key-value pairs in this RDD to the master as a Map. * * Warning: this doesn't return a multimap (so if you have multi...原创 2019-02-13 10:10:39 · 7545 阅读 · 0 评论 -
Spark2.3.2源码解析:(多线程)不中断线程 (UninterruptibleThread )
本文讲述,spark中的不中断线程的内容。直接看代码:UninterruptibleThread主要作用是重写 Thread类的interrupt方法,在执行thread.interrupt()方法的时候增加了一个判断uninterruptible(或者说是一个锁,在线程执行完成之后,通过finally进行释放),如果这个值为ture,打断不起作用。默认值false。 un...原创 2019-01-16 13:09:31 · 7431 阅读 · 0 评论 -
Spark RDD的默认分区数
spark.default.parallelism:(默认的并发数) 如果配置文件spark-default.conf中没有显示的配置,则按照如下规则取值: 本地模式(不会启动executor,由SparkSubmit进程生成指定数量的线程数来并发): spark-shell spark.default.pa...转载 2019-01-04 09:58:05 · 7741 阅读 · 0 评论 -
Spark 本地化计算参数调整分析
Spark在Driver上,对Application的每一个stage的task,进行分配之前,都会计算出每个task要计算的是哪个分片数据,RDD的某个partition;Spark的task分配算法,优先,会希望每个task正好分配到它要计算的数据所在的节点,这样的话,就不用在网络间传输数据; 但是呢,通常来说,有时,事与愿违,可能task没有机会分配到它的数据所在的节点,为...原创 2018-12-28 22:10:24 · 6411 阅读 · 0 评论 -
Spark复杂情况下的stage划分 reduceByKey leftOuterJoin union
为了研究复杂情况下的stage划分,故意写了一段复杂一点的代码进行测试。 代码:import org.apache.spark.{SparkConf, SparkContext}object WordDemo { //spark-submit --name 'WordDemo' --class WordDemo --master yarn --num-executors ...原创 2018-12-28 10:48:23 · 5602 阅读 · 0 评论 -
Spark2.3.2源码解析: 10. 调度系统 Task任务提交 (三) TaskScheduler : Executor 任务提交
架构图: 代码提交时序图Standalone模式提交运行流程图: 首先写一个WordCount代码(这个代码,为了观察多个stage操作,我写了两个reducebykey 函数)源代码: 直接执行代码,查看spark执行程序时,将代码划分stage生成的DAG流程图 可知: WordCount 在stage划分的时...原创 2018-12-29 17:03:59 · 7415 阅读 · 0 评论 -
Spark2.3.2源码解析: 10. 调度系统 Task任务提交 (二) TaskScheduler : 本地化计算
架构图: Standalone模式提交运行流程图: 首先写一个WordCount代码(这个代码,为了观察多个stage操作,我写了两个reducebykey 函数)源代码: 直接执行代码,查看spark执行程序时,将代码划分stage生成的DAG流程图 可知: WordCount 在stage划分的时候,划分为三个stage ...原创 2018-12-25 16:00:02 · 5858 阅读 · 0 评论 -
Spark2.3.2源码解析: 10. 调度系统 Task任务提交 (一) DAGScheduler 之 stage 提交
一个Spark Application分为stage级别和task级别的调度, task来源于stage,所有本文先从stage提交开始讲解task任务提交。 架构图:Standalone模式提交运行流程图:首先写一个WordCount代码(这个代码,为了观察多个suffle操作,我写了两个reducebykey 函数)源代码: 直接执行代码,查看...原创 2018-12-22 12:11:52 · 5952 阅读 · 1 评论 -
Spark2.3.2源码解析:9.调度系统 DAGScheduler 之 Stage 划分源码详解
Stage划分的时候,大家应该都知道是从最后一个stage向根据宽窄依赖,递归进行stage划分。但是代码里面涉及的逻辑复杂。毕竟涉及到相互递归调用。让人似懂非懂。 反正我是炸毛了 o(╥﹏╥)o本文专门用一篇文章详细论述DAGScheduler 的 stage 划分流程为了更容易理解,本文采用 debug模式+实例+源码的方式进行讲解首先写一个WordCount代码(这个代码,为...原创 2018-12-22 12:49:16 · 8759 阅读 · 2 评论 -
Spark2.3.2源码解析: 8. RDD 源码解析 (二) textFile 返回的RDD实例是什么
本文主要目标是分析RDD的实例对象,到底放了什么。从代码val textFile = sc.textFile(args(0)) 开始:直接看textFile 源码:你会发现调用的是hadoop的api,通过 hadoopFile 读取数据,返回一个hadoopRDD对象 hadoopRDD 返回的结果,其实就是1 val...原创 2018-12-21 16:13:40 · 5965 阅读 · 0 评论 -
Spark2.3.2源码解析: 8. RDD 源码解析 (一) RDD 类分析
全称: 弹性分布式数据集1)有一个分片列表,就是能被切分,和Hadoop一样,能够切分的数据才能并行计算。 一组分片(partition),即数据集的基本组成单位,对于RDD来说,每个分片都会被一个计算任务处理,并决定并行计算的粒度。用户可以在创建RDD时指定RDD的分片个数,如果没有指定,那么就会采用默认值。默认值就是程序所分配到的CPU Core的数目。每个分配的存储是由Bloc...原创 2018-12-19 18:40:45 · 5832 阅读 · 0 评论 -
Spark2.3.2源码解析: 7.3. SparkContext源码分析(二) :调度系统 DAGScheduler
简介: 本质上在Actions算子中通过SparkContext执行提交作业的runJob操作,触发了RDD DAG的执行。 所以本文从runJob方法进行解析 从而引出DAGScheduler、TaskScheduler 。。。。 代码部分: 提交流程图:调度流程: 源码解析: 直...原创 2018-12-20 17:35:34 · 6197 阅读 · 3 评论 -
Spark2.3.2源码解析: 7.2. SparkContext源码分析(二) :TaskSchedulerImpl
代码部分: 启动脚本 --name spark-test --class WordCount --master yarn --deploy-mode cluster /A/spark-test.jar /mysqlClean.sql 执行jar包 spark-test.jar 代码 核心: // 创建SparkCo...原创 2018-12-12 17:47:33 · 6252 阅读 · 0 评论 -
Spark2.3.2源码解析: 7.1. SparkContext源码分析(一) : SparkEnv
SparkContext 是通往 Spark 集群的唯一入口,可以用来在 Spark 集群中创建 RDDs 、 累加器( Accumulators )和广播变量( Broadcast Variables ) 。 SparkContext 也是整个 Spark 应用程序( Application ) 中 至关重要的一个对象,可以说是整个 Application 运行调度的核心 (不是指资源调...原创 2018-12-12 15:19:42 · 5965 阅读 · 0 评论 -
Spark2.3.2源码解析: 6. RDD 依赖关系:宽依赖与窄依赖
Spark中RDD的高效与DAG(有向无环图)有很大的关系,在DAG调度中需要对计算的过程划分Stage,划分的依据就是RDD之间的依赖关系。RDD之间的依赖关系分为两种,宽依赖(wide dependency/shuffle dependency)和窄依赖(narrow dependency) 1.窄依赖窄依赖就是指父RDD的每个分区只被一个子RDD分区使用,子RDD分区通常...原创 2018-12-12 11:27:01 · 6163 阅读 · 0 评论 -
Spark2.3.2源码解析: 5. SparkConf源码分析
在执行代码的时候,首先要声明:SparkConf,本文以SparkConf进行分析,逐步展开。 val conf = new SparkConf() 类中的方法(org.apache.spark.SparkConf)Modifier and Type Method and Description SparkConf clone()...原创 2018-12-11 16:43:57 · 6426 阅读 · 0 评论 -
Spark2.3.2源码解析: 4.2.Yarn cluster 模式 SparkSubmit源码分析(二)ApplicationMaster
准备工作:启动脚本 --name spark-test --class WordCount --master yarn --deploy-mode cluster /A/spark-test/spark-test.jar /tmp/zl/data/data.txt 执行jar包 spark-test.jar 代码 核心: val c...原创 2018-12-18 14:36:12 · 9798 阅读 · 0 评论 -
Spark2.3.2源码解析: 4.1.Yarn cluster 模式 SparkSubmit源码分析(一)
因为所有的任务提交代表都是从SparkSubmit开始,所以先从开始看源码,但是这个估计会有点复杂,先通读一下。 准备工作:启动脚本 --name spark-test --class WordCount --master yarn --deploy-mode cluster /A/spark-test/spark-test.jar /tmp/zl/data/data.txt...原创 2018-12-07 23:56:45 · 9933 阅读 · 2 评论 -
Spark2.3.2源码解析: 3.启动worker节点启动流程源码分析
本文启动worker节点启动流程分析 启动命令:${SPARK_HOME}/sbin/start-slave.sh spark://sysadmindeMacBook-Pro.local:7077 查看start-slave.sh 执行脚本:/workspace/spark-2.3.2/sbin/spark-daemon.sh start org.apache....原创 2018-12-06 15:20:50 · 6143 阅读 · 0 评论 -
Spark2.3.2源码解析: 2.启动master节点流程源码分析
本文主要说明在启动master节点的时候,代码的流程走向。 授予文件执行权限chmod755 两个目录里的文件:/workspace/spark-2.3.2/bin --所有文件/workspace/spark-2.3.2/sbin 启动脚本:start-master.sh 脚本最终执行的是:"${SPARK_HOME}/sbin"/spark-da...原创 2018-12-05 23:34:00 · 6685 阅读 · 2 评论 -
Spark2.3.2源码分析:1.代码阅读环境准备
准备工作(仅针对于mac环境) ‘版本 软件 版本 操作系统 MAC Jdk 1.8 Maven 3.3.9+ Scala 2.10.6 Spark ...原创 2018-12-05 16:49:41 · 6565 阅读 · 7 评论 -
Spark2.1 内存管理详解
本文中阐述的原理基于 Spark 2.1 版本,阅读本文需要读者有一定的 Spark 和 Java 基础,了解 RDD、Shuffle、JVM 等相关概念。在执行 Spark 的应用程序时,Spark 集群会启动 Driver 和 Executor 两种 JVM 进程,前者为主控进程,负责创建 Spark 上下文,提交 Spark 作业(Job),并将作业转化为计算任务(Task),在各...翻译 2018-12-11 14:16:23 · 6740 阅读 · 1 评论 -
Spark基础知识详解
Apache Spark是一种快速通用的集群计算系统。 它提供Java,Scala,Python和R中的高级API,以及支持通用执行图的优化引擎。 它还支持一组丰富的高级工具,包括用于SQL和结构化数据处理的Spark SQL,用于机器学习的MLlib,用于图形处理的GraphX和Spark Streaming。Spark优点:减少磁盘I/O:随着实时大数据应用越来越多...翻译 2018-12-12 17:45:38 · 14023 阅读 · 3 评论