Spark的shuffle和MapReduce的shuffle对比
MapperReduce的shuffle
shuffle阶段划分
Map阶段和Reduce阶段
任务
MapTask和ReduceTask
shuffle过程
Map阶段shuffle:分区->排序->合并
①数据从环形缓冲区溢写到磁盘前,需要先进行分区,然后区内排序
②环形缓存区数据到达阈值(80%),会以小文件的形式溢写到磁盘,此过程可以开启combiner
③将溢写的小文件按照相同分区进行merge
Reduce阶段shuffle:拷贝数据->排序->合并
①一个ReduceTask负责一个分区数据,需从多个MapTask的同一个分区拷贝数据到机器。
②将拷贝过来的数据优先存储在内存,次之磁盘,然后排序,合并做到数据分区内有序
shffle的意义:只有存在reduce才有shuffle,shuffle的意义就是给reduce提供服务。
Spark的shuffle
介绍
①spark的某些算子会触发shuffle,出现shuffle的目的是在不同分区间重新分配数据。
②shuffle过程数据是跨机器传输的,消耗大量的网络io和序列化,消耗性能。
③shuffle后不能保证新的分区的数据是有序的。区别于MR ( MR的shuffle后区内的数据是有序的 )
但是可以调用排序的算子,使得数据区内有序。
④产生shuffle的算子都是分两步执行,mapTask组织数据(shuffle write), reduceTask(shuffle read)
⑤spark的mapTask优先将数据写入内存,内存不足,将数据区内有序,溢写到磁盘
会产生shuffle的算子
①repartition 和 coalesce 重新计算分区的算子。
②??ByKey:除了countByKey,都会产线shuffle
③cogroup 和 join
性能的影响
shuffle就是将数据在不同分区间进行聚合分配,集群的多节点的数据交换,会涉及到磁盘I/O,序列化,网络I/O,很消耗性能。
总结
spark中的shuffle耗时,消耗性能,应该尽量避免!
spark中的shuffle和MapReduce的shuffle的功能一致,跨机器传输数据,细节略有不同。
Spark的shuffle和MapReduce的shuffle对比的更多相关文章
- [Spark性能调优] 第三章 : Spark 2.1.0 中 Sort-Based Shuffle 产生的内幕
本課主題 Sorted-Based Shuffle 的诞生和介绍 Shuffle 中六大令人费解的问题 Sorted-Based Shuffle 的排序和源码鉴赏 Shuffle 在运行时的内存管理 ...
- Spark源码分析之Sort-Based Shuffle读写流程
一 .概述 我们知道Spark Shuffle机制总共有三种: 1.未优化的Hash Shuffle:每一个ShuffleMapTask都会为每一个ReducerTask创建一个单独的文件,总的文件数 ...
- Spark 调优之ShuffleManager、Shuffle
Shuffle 概述 影响Spark性能的大BOSS就是shuffle,因为该环节包含了大量的磁盘IO.序列化.网络数据传输等操作. 因此,如果要让作业的性能更上一层楼,就有必要对 shuffle 过 ...
- Spark Tungsten揭秘 Day2 Tungsten-sort Based Shuffle
Spark Tungsten揭秘 Day2 Tungsten-sort Based Shuffle 今天在对钨丝计划思考的基础上,讲解下基于Tungsten的shuffle. 首先解释下概念,Tung ...
- Spark技术内幕: 如何解决Shuffle Write一定要落盘的问题?
在Spark 0.6和0.7时,Shuffle的结果都需要先存储到内存中(有可能要写入磁盘),因此对于大数据量的情况下,发生GC和OOM的概率非常大.因此在Spark 0.8的时候,Shuffle的每 ...
- Spark技术内幕:Sort Based Shuffle实现解析
在Spark 1.2.0中,Spark Core的一个重要的升级就是将默认的Hash Based Shuffle换成了Sort Based Shuffle,即spark.shuffle.manager ...
- 大数据技术 - MapReduce的Shuffle及调优
本章内容我们学习一下 MapReduce 中的 Shuffle 过程,Shuffle 发生在 map 输出到 reduce 输入的过程,它的中文解释是 “洗牌”,顾名思义该过程涉及数据的重新分配,主要 ...
- MapReduce核心 - - - Shuffle
大数据名词(1) -Shuffle Shuffle过程是MapReduce的核心,也被称为奇迹发生的地方.要想理解MapReduce, Shuffle是必须要了解的.我看过很多相关的资料,但每 ...
- MapReduce的Shuffle过程介绍
MapReduce的Shuffle过程介绍 Shuffle的本义是洗牌.混洗,把一组有一定规则的数据尽量转换成一组无规则的数据,越随机越好.MapReduce中的Shuffle更像是洗牌的逆过程,把一 ...
随机推荐
- 穿点最多的直线 牛客网 程序员面试金典 C++
穿点最多的直线 牛客网 程序员面试金典 C++ 题目描述 在二维平面上,有一些点,请找出经过点数最多的那条线. 给定一个点集vectorp和点集的大小n,没有两个点的横坐标相等的情况,请返回一个vec ...
- P2598 [ZJOI2009]狼和羊的故事(最小割)
P2598 [ZJOI2009]狼和羊的故事 说真的,要多练练网络流的题了,这么简单的网络流就看不出来... 题目要求我们要求将狼和羊分开,也就是最小割,(等等什么逻辑...头大....) 我们这样想 ...
- hdu 1503 Advanced Fruits(DP)
题意: 将两个英文单词进行合并.[最长公共子串只要保留一份] 输出合并后的英文单词. 思路: 求最长公共子串. 记录路径: mark[i][j]=-1:从mark[i-1][j]转移而来. mark[ ...
- 使用.NET6打造动态API
ApiLite是直接将Service层自动生成api路由,可以不用添加Controller,支持模块插件化,在项目开发中能够提高工作效率,降低代码量. 开发环境 .NET SDK 6.0.100-rc ...
- Jmeter二次开发实现自定义functions函数(九)
在Jmeter->选项->函数助手对话框中我们可以看到Jmeter内置的一些常用函数,但考虑到测试过程中的实际情况,我们经常需要在脚本引用或者实现自定义的函数.那么如何在"函数助 ...
- loadrunner奇怪问题解决:TPS中有Action_Transaction 和 vuser_init_Transaction
TPS图里多出两条曲线:Action_Transaction 和 vuser_init_Transaction 如下图: 解决方法: Runtime-Settings-Miscellaneous--A ...
- 【JavaScript使用技巧】三个截取字符串中的子串,你用的哪个
[JavaScript使用技巧]三个截取字符串中的子串,你用的哪个 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! slice( ...
- vue + cesium开发(5) 搭建 vue + cesium开发环境(2)
上vue+cesium开发(1)中,没有进行配置webpack,而是使用了插件进行代替,在使用过程中出现了一些未知BUG,影响体验,因此参考了官方文档对项目进行重新配置,使用了 copy-webpac ...
- 关于JAVA中顺序IO的基本操作
关于JAVA中顺序IO的基本操作 写在前面 最近研究一下JAVA中的顺序IO,在网络上找了一会儿,发现少有详细的介绍,顾此在此处说说顺序IO,才学疏浅,如有不对,望赐教. 什么是顺序IO 事实上JAV ...
- [cf1236F]Alice and the Cactus
首先,我们要用到期望的一个性质: 对于两个随机变量$X$和$Y$(不需要相互独立),有$E(X+Y)=E(X)+E(Y)$ 另外,对于一个仙人掌,令$n$为点数,$m$为边数,$c$为简单环个数,$X ...