一、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所需的函数处理。