博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spark的Shuffle过程
阅读量:6976 次
发布时间:2019-06-27

本文共 908 字,大约阅读时间需要 3 分钟。

  hot3.png

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

转载于:https://my.oschina.net/kavn/blog/758389

你可能感兴趣的文章
Redis notes
查看>>
每天一道算法题(11)——栈的push、pop 序列
查看>>
关于游戏汉化
查看>>
Python中eval函数的作用
查看>>
把Catalina的字符串格式转化为日期格式
查看>>
Linux 笔记
查看>>
easy_install 和 pip
查看>>
ssm中返回中文字符串时出现乱码?
查看>>
复习i++和++j
查看>>
Linux启动过程详解
查看>>
MFC 添加背景图片并让控件背景透明
查看>>
【语法】NSMutableString的用法
查看>>
python
查看>>
apache2 开源协议
查看>>
JFinal
查看>>
图片跟随鼠标移动
查看>>
使用Java绘制验证码
查看>>
前端知识点总结(html+css)部分
查看>>
docker安装elasticsearch
查看>>
设计模式
查看>>