Spark与Hadoop(MapReduce)的shuffle的相同与不同点

时间:2018-12-19 17:49:46   来源:菜鸟级的IT之路   阅读:
Apache Spark Shuffle 过程与 Apache Hadoop Shuffle 过程有着诸多类似,一些概念可直接套用,例如,Shuffle 过程中,提供数据的一端,被称作 Map 端,Map 端每个生成数据的任务称为 Mapper,对应的,接收数据的一端,被称作 Reduce 端,Reduce 端每个拉取数据的任务称为 ReducerShuffle 过程本质上都是将 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-basedMapReduce 可以说是 sort-basedshuffle write shuffle read 过程都是基于key sorting (buffering records + in-memory sort + on-disk external sorting)。早期的 Spark hash-basedshuffle 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 进行 aggregate5. 从性能优化角度来讲,Spark考虑的更全面。MapReduce shuffle 方式单一。Spark 针对不同类型的操作、不同类型的参数,会使用不同的 shuffle write 方式

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

主要的区别:

一个落盘,一个不落盘,spark就是为了解决MapReduce落盘导致效率低下的问题而产生的,原理还是MapReduce的原理,只是shuffle放在内存中计算了,所以效率提高很多。(https://blog.csdn.net/WYpersist/article/details/79982627

上海尚学堂大数据培训新班继续开放,联系客服小姐姐可以获取大数据全套资料,年底前报班学习更可以赢取iPAD,加油学大数据,未来的前程是十分光明的,大数据是DT时代的主流!

分享:0

电话咨询

客服热线服务时间

周一至周五 9:00-21:00

周六至周日 9:00-18:00

咨询电话

021-67690939
15201841284

微信扫一扫