【摘要】:相比MR机制仅有固定一种Shuffle机制不同,Spark提供了两种Shuffle机制给用户选择。在Spark 1.1之前的版本中,Spark仅提供了哈希Shuffle机制,其实现同前面所述的聚合-计算过程基本一致。排序Shuffle相比哈希Shuffle,两者的Shuffle读过程是完全一致的,唯一区别在于Shuffle写过程。排序Shuffle能保证每个mapper只输出一个文件,且内部数据至少会按照分区编号排序,在ShuffleDepdency指定keyOrdering的前提下,单个分区内部还会进一步按照键值进行排序。
相比MR机制仅有固定一种Shuffle机制不同,Spark提供了两种Shuffle机制给用户选择。
在Spark 1.1之前的版本中,Spark仅提供了哈希Shuffle(Hash-BasedShuffle)机制,其实现同前面所述的聚合-计算过程基本一致。如8.1.2节中所述,聚合计算过程后,分区内部的数据是无序的,如果开发者希望有序,就需要调用排序相关的转换操作,例如sortBy、sortByKey;再者,哈希Shuffle每个mapper会针对每个reducer生成一个数据文件,当mapper和reducer数量较多时,会导致磁盘上生成大量的文件。
从Spark 1.1开始,Spark提供了另一套备选Shuffle机制—排序Shuffle(Sort-BasedShuffle),并且从Spark 1.2开始,把排序Shuffle作为默认的Shuffle机制,用户可以将配置项spark.shuffle.manager设置为hash或者sort,来使用对应的Shuffle机制。排序Shuffle相比哈希Shuffle,两者的Shuffle读过程是完全一致的,唯一区别在于Shuffle写过程。换句话说,两者区别仅在于map端、reduce端是否完全一致。排序Shuffle能保证每个mapper只输出一个文件,且内部数据至少会按照分区编号排序,在ShuffleDepdency指定keyOrdering的前提下,单个分区内部还会进一步按照键值进行排序。(www.xing528.com)
两类Shuffle机制读写过程的具体实现会在后面8.2以及8.3小节中具体讲解。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。