介绍:

在Spark 1.2以前,默认的shuffle计算引擎是HashShuffleManager。HashShuffleManager采用的hashShuffle机制很大的问题就是产生大量的中间磁盘文件,产生的大量磁盘IO操作会有性能问题。

在Spark 1.2以后的版本中,默认的ShuffleManager改成了SortShuffleManager。SortShuffleManager相较于HashShuffleManager来说,有了一定的改进。主要就在于,每个Task在进行shuffle操作时,虽然也会产生较多的临时磁盘文件,但是最后会将所有的临时文件合并(merge)成一个磁盘文件,因此每个Task就只有一个磁盘文件。在下一个stage的shuffle read task拉取自己的数据时,只要根据索引读取每个磁盘文件中的部分数据即可。

所以,SortShuffle这种方式以更少的中间磁盘文件产生性能优于HashShuffle。包括两种运行机制:一种为普通机制,一种为byPass机制。而bypass机制的启动条件为:shuffle read task 的数量小于等于spark.shuffle.sort.bypassMergeThreshold参数的值时(default:200),就会启动bypass机制,因此:当read task个数少不是很多的情况下,采用bypass机制会更好

下面分析SortShuffle的两种机制:

普通运行机制:

在该模式下,数据会先写入一个数据结构,聚合算子写入Map,一边通过Map局部聚合,一边写入内存。Join算子写入ArrayList直接写入内存中。然后需要判断是否达到阈值,如果达到就会将内存数据结构的数据写入到磁盘,清空内存数据结构。

在溢写磁盘前,先根据key进行排序,排序过后的数据,会分批写入到磁盘文件中。默认批次为10000条,数据会以每批一万条写入到磁盘文件。写入磁盘文件通过缓冲区溢写的方式,每次溢写都会产生一个磁盘文件,也就是说一个task过程会产生多个临时文件。

最后在每个task中,将所有的临时文件合并,这就是merge过程,此过程将所有临时文件读取出来,一次写入到最终文件。意味着一个task的所有数据都在这一个文件中。同时单独写一份索引文件,标识下游各个task的数据在文件中的索引,start offset和end offset。

这样算来如果第一个stage 50个task,每个Executor执行一个task,那么无论下游有几个task,就需要50个磁盘文件。

bypass机制:

bypass机制运行条件:

shuffle map task数量小于spark.shuffle.sort.bypassMergeThreshold参数的值。
不是聚合类的shuffle算子(比如reduceByKey)。
在这种机制下,当前stage的task会为每个下游的task都创建临时磁盘文件。将数据按照key值进行hash,然后根据hash值,将key写入对应的磁盘文件中(个人觉得这也相当于一次另类的排序,将相同的key放在一起了)。最终,同样会将所有临时文件依次合并成一个磁盘文件,建立索引。

该机制与未优化的hashshuffle相比,没有那么多磁盘文件,下游task的read操作相对性能会更好。

该机制与sortshuffle的普通机制相比,在readtask不多的情况下,首先写的机制是不同,其次不会进行排序。这样就可以节约一部分性能开销。

Spark原理之SortShuffle相关推荐

  1. Spark原理与实战

    目录 1.0 spark原理架构 1.1 driver 1.2 cluster manager 1.3 DAG 1.4 RDD依赖关系 2.0 spark summary 2.1 架构图 2.2 项目 ...

  2. spark原理解析和spark core

    spark原理解析 解析一:resilient distributed dataset (RDD) resilient distributed dataset (RDD):弹性分布式数据集,有容错机制 ...

  3. spark原理参数调优

    一.spark原理 参考: Hive on Spark调优_窗外的屋檐-CSDN博客_spark.executor.instancesSpark资源参数调优参数_TURING.DT-CSDN博客_sp ...

  4. 看了这篇文章,妈妈再也不用担心我的学习了---spark原理

    前言 大家好,我是DJ丶小哪吒,我又来跟你们分享知识了.对软件开发有着浓厚的兴趣.喜欢与人分享知识.做博客的目的就是为了能与 他 人知识共享.由于水平有限.博客中难免会有一些错误.如有 纰 漏之处,欢 ...

  5. 图解Spark原理及实践----大数据技术栈12

    回顾:大数据平台技术栈 (ps:可点击查看),今天就来说说其中的Spark! 来自:ITPUB Spark 已经成为广告.报表以及推荐系统等大数据计算场景中首选系统,因效率高,易用以及通用性越来越得到 ...

  6. Spark原理与调优

    Spark core 作业提交流程 1. client运行脚本提交命令. 2. SparkSubmit实例化SparkSubmitArguments进行参数解析. 3. SparkSubmit实例化Y ...

  7. Spark原理篇之工作原理

    1 Spark背景 Spark是一个加州大学伯克利分校(UC Berkeley AMP)开发的一个分布式数据快速分析项目.它的核心技术是弹性分布式数据集(Resilient distributed d ...

  8. Spark 原理及RDD理解

    一.spark原理图 二.sparkRDD图解 * 三.什么是Spark开发(核心编程原理) 1,定义初始的RDD,即创建最原始的RDD 2,做最初始的RDD进行算子的转换操作(flatMap,map ...

  9. springsecurity原理执行流程_3. Spark原理-执行流程解析

    概念 Job 当在RDD上执行Action操作时就会提交一个Job.这个Job会将RDD分为多分,并将每份RDD提交到集群执行. Stage 当一个Job提交后将分解为多个Stage. Task 一个 ...

最新文章

  1. 原创 | 一文读懂正态分布与贝塔分布
  2. laravel 队列queue
  3. Servlet(自己实现的Servlet)细节
  4. Count The Repetitions
  5. leetcode 712. Minimum ASCII Delete Sum for Two Strings | 712. 两个字符串的最小ASCII删除和(暴力递归->傻缓存->DP)
  6. 域本地组,全局组,通用组的应用
  7. eclipse中git的配置、提交代码、从远程导入代码
  8. easyui之treegrid的生成
  9. 数据结构之线性表——链式存储结构之单链表(php代码实现)
  10. Python 命令行之旅:深入 argparse(二)
  11. webpack资源的输入与输出
  12. JAVA8免费下载安装(win10)
  13. 地籍图宗记注记标注实现
  14. 水桶理论——联想国际化的奇特哲学
  15. 利用QRmaker制作二维码
  16. 使用FTP进行主机与Linux的文件传输
  17. 【10月31日】机器学习实战(二)决策树:隐形眼镜数据集
  18. 微信小程序wx:if与hidden区别
  19. 测绘资质专业类别该如何区分并选择合适的专业
  20. 《数学之美》中的模型及启示总结

热门文章

  1. Synergy : 多电脑共享鼠标和键盘
  2. word 里域代码显示设定
  3. C#中抽象方法和虚方法的区别
  4. 【Leetcode】135. 分发糖果
  5. el-button组件里hover事件不生效
  6. 并发基础(一)并发的三大特性
  7. 两个div在同一行,且让第三个div换行,去除浮动
  8. 经典微信营销案例排行榜
  9. Kooboo完全介绍二:创建第一个Kooboo站点
  10. 集中式、分布式、集群、高并发等概念