文档章节

Spark的Shuffle过程

问津已非少年
 问津已非少年
发布于 2016/10/14 11:24
字数 491
阅读 206
收藏 1

Shuffle过程图

 

 

 

 

 

 

Shuffle过程分为shuffle write和shuffle read。

由父RDD(比如join就是join两边的RDD)根据分区数进行划分,并写内存或磁盘,构成write过程。由子RDD(join之后生成的RDD,分区数由spark.default.parallelism控制)从父RDD那里拉取数据到自己的分区构成read过程。

write就是Map细分的过程,而read就是Reduce合并的过程。Spark里也存在combine过程,就是在父RDD的write的时候,在本地做一次合并,相当于一次Reduce,可以减少read过程读取的数据量,减少网络IO。Shuffle过程中,需保证同一个key落在同一个partion里就可以了。

Shuffle又分为hash shuffle和sort based shuffle,后者是对前者的改进,在spark的后期版本里,后者是默认选择。

Hash shuffle与Sort based shuffle的区别在于Write过程不同,其Read过程完全一样。在shuffle中,如果父RDD的分区数为m,子RDD的分区数为n,那么Hash Shuffle在write过程中每个分区会写n个文件,每个文件对应了子RDD的一个分区,这样一共为 m*n 个文件。而Sort based shuffle则与Hadoop MR的shuffle很像,父RDD的每个分区只会生成一个文件(文件中一个分区的数据是连续的),同时会生成该文件的索引文件,索引文件可以明确指出子RDD分区所需要的数据在哪。

这样Sort based shuffle的好处就在于它比Hash shuffle生成了更少的文件,shuffle过程中磁盘上不会累积大量数据文件,同时在文件生成过程中也不会占用更多内存缓冲空间

update: 2017-03-25 增加了两种shuffle的区别说明

欢迎阅读转载,转载请注明出处:https://my.oschina.net/u/2539801/blog/758389

© 著作权归作者所有

问津已非少年
粉丝 18
博文 21
码字总数 33944
作品 0
海淀
程序员
私信 提问
Spark 的Core深入(二)

Spark 的 Core 深入(二) 标签(空格分隔): Spark的部分 一、日志清洗的优化: 1.1 日志清洗有脏数据问题 rdd.partitions.length rdd.cacherdd.count 一个分区默认一个task 分区去处理默认...

flyfish225
2018/05/08
0
0
剖析Hadoop和Spark的Shuffle过程差异(二)

上一篇博客《剖析Hadoop和Spark的Shuffle过程差异(一)》剖析了Hadoop MapReduce的Shuffle过程,那么本篇博客,来聊一聊Spark shuffle。 Spark shuffle相对来说更简单,因为不要求全局有序,...

冷血狂魔
03/12
184
0
一篇文章了解 Spark Shuffle 内存使用

在使用 Spark 进行计算时,我们经常会碰到作业 (Job) Out Of Memory(OOM) 的情况,而且很大一部分情况是发生在 Shuffle 阶段。那么在 Spark Shuffle 中具体是哪些地方会使用比较多的内存而有...

Spark
03/17
0
0
【Spark】Spark 核心架构原理

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/gongxifacai_believe/article/details/86709783 1、BDAS: Berkeley Data Analytics Stack 2、Spark和MapReduce的对比......

魏晓蕾
01/31
0
0
好程序员分享ApacheSpark常见的三大误解

  误解一:Spark是一种内存技术   大家对Spark最大的误解就是其是一种内存技术(in-memorytechnology)。其实不是这样的!没有一个Spark开发者正式说明这个,这是对Spark计算过程的误解。...

好程序员IT
04/22
9
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
1K
12
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
22
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
17
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
30
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部