博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(转)Spark与Hadoop的shuffle的异同
阅读量:4280 次
发布时间:2019-05-27

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

【转载原因:两者shuffle的异同,讲解非常全面,收获良多~】

【转载原文:https://blog.csdn.net/WYpersist/article/details/79982627】

   Apache Spark 的 Shuffle 过程与 Apache Hadoop 的 Shuffle 过程有着诸多类似,一些概念可直接套用,例如,Shuffle 过程中,提供数据的一端,被称作 Map 端,Map 端每个生成数据的任务称为 Mapper,对应的,接收数据的一端,被称作 Reduce 端,Reduce 端每个拉取数据的任务称为 Reducer,Shuffle 过程本质上都是将 Map 端获得的数据使用分区器进行划分,并将数据发送给对应的 Reducer 的过程。

--------------------------------

1. 从逻辑角度来讲,Shuffle 过程就是一个 GroupByKey 的过程,两者没有本质区别。只是 MapReduce 为了方便 GroupBy 存在于不同 partition 中的 key/value records,就提前对 key 进行排序。Spark 认为很多应用不需要对 key 排序,就默认没有在 GroupBy 的过程中对 key 排序。

 

2. 从数据流角度讲,两者有差别。MapReduce 只能从一个 Map Stage shuffle 数据,Spark 可以从多个 Map Stages shuffle 数据(这是 DAG 型数据流的优势,可以表达复杂的数据流操作,参见 CoGroup(), join() 等操作的数据流图 SparkInternals/4-shuffleDetails.md at master · JerryLead/SparkInternals · GitHub)。

 

3. Shuffle write/read 实现上有一些区别。以前对 shuffle write/read 的分类是 sort-based 和 hash-based。MapReduce 可以说是 sort-based,shuffle write 和 shuffle read 过程都是基于key sorting 的 (buffering records + in-memory sort + on-disk external sorting)。早期的 Spark 是 hash-based,shuffle write 和 shuffle read 都使用 HashMap-like 的数据结构进行 aggregate (without key sorting)。但目前的 Spark 是两者的结合体,shuffle write 可以是 sort-based (only sort partition id, without key sorting),shuffle read 阶段可以是 hash-based。因此,目前 sort-based 和 hash-based 已经“你中有我,我中有你”,界限已经不那么清晰。

 

4. 从数据 fetch 与数据计算的重叠粒度来讲,两者有细微区别。MapReduce 是粗粒度,reducer fetch 到的 records 先被放到 shuffle buffer 中休息,当 shuffle buffer 快满时,才对它们进行 combine()。而 Spark 是细粒度,可以即时将 fetch 到的 record 与 HashMap 中相同 key 的 record 进行 aggregate。5. 从性能优化角度来讲,Spark考虑的更全面。MapReduce 的 shuffle 方式单一。Spark 针对不同类型的操作、不同类型的参数,会使用不同的 shuffle write 方式

-----------------------------------------

主要的区别:

一个落盘,一个不落盘,spark就是为了解决mr落盘导致效率低下的问题而产生的,原理还是mr的原理,只是shuffle放在内存中计算了,所以效率提高很多。

----------------------------------------

参考:

https://blog.csdn.net/u012965373/article/details/51427105

 

http://lib.csdn.net/article/spark/56578

 

https://blog.csdn.net/johnny_lee/article/details/22619585

————————————————
版权声明:本文为CSDN博主「菜鸟级的IT之路」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/WYpersist/article/details/79982627

你可能感兴趣的文章
speex回音消除
查看>>
audio 声道路由策略分析
查看>>
Android Audio 代码分析- Audio Strategy
查看>>
DAPM之二: audio paths与dapm kcontrol
查看>>
Android音量控制曲线
查看>>
Android Tombstone/Crash的log分析和定位
查看>>
Android Native/Tombstone Crash Log 详细分析
查看>>
怎么更改安卓系统铃声级数大小
查看>>
怎么更改开机铃声的声音大小
查看>>
Linux内核驱动之GPIO子系统(一)GPIO的使用
查看>>
system系统调用的使用
查看>>
怎么在编译时打印log
查看>>
怎么添加一个tinymix可执行文件的te文件
查看>>
usb BC1.2的三种端口
查看>>
linux下的"BusHound"——usb_mon非常好
查看>>
linux usb枚举过程分析【host】
查看>>
android之通过USB插拔流程来了解android UEvent
查看>>
[RK3288][Android6.0] USB 枚举过程小结
查看>>
CarPlay简介
查看>>
CarPlay介绍
查看>>