七、MapReduce的Shuffle和Spark的Shuffle异同?谈一谈各自的特点和过程。

混江龙づ霸主 提交于 2019-11-30 08:03:01

1、MapReduce的Shuffle机制:

在MapReduce框架中,shuffle是连接Map和Reduce之间的桥梁,Map大的输出要用到Reduce中必须经过shuffle这个环节,

shuffle的性能高低直接影响了整个程序的性能和吞吐量。
Shuffle是MapReduce框架中的一个特定的phase,介于Map phase和Reduce phase之间,当Map的输出结果要被Reduce使用时,输出结果需要按key哈希,并且分发到每一个Reducer上去,这个过程就是shuffle。 由于shuffle涉及到了磁盘的读写和网络的传输,因此shuffle性能的高低直接影响到了整个程序的运行效率。
 
2:Spark的Shuffle机制:
  Spark中的Shuffle是 把一组无规则的数据尽量转换成一组具有一定规则的数据。
Spark计算模型是 在分布式的环境下计算的,这就不可能在单进程空间中容纳所有的计算数据来进行计算 ,这样数据就按照Key进行分区,分配成一块一块的小分区,打散分布在集群的各个进程的内存空间中,并不是所有计算算子都满足于按照一种方式分区进行计算。
当需要对数据进行排序存储时,就有了重新按照一定的规则对数据重新分区的必要, Shuffle就是包裹在各种需要重分区的算子之下的一个对数据进行重新组合的过程。在逻辑上还可以这样理解:由于重新分区需要知道分区规则,而分区规则按照数据的Key通过映射函数(Hash或者Range等)进行划分,由数据确定出Key的过程就是Map过程,同时Map过程也可以做数据处理,例如,在Join算法中有一个很经典的算法叫Map Side Join,就是确定数据该放到哪个分区的逻辑定义阶段。 Shuffle将数据进行收集分配到指定Reduce分区,Reduce阶段根据函数对相应的分区做Reduce所需的函数处理。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!