【摘要】:即将配置属性“spark.shuffle.manager”从hash换成了sort,对应ShuffleManager的实现类分别是HashShuffleManager和SortShuffleManager。在Spark 1.1版本中,Spark借鉴了Hadoop MapReduce的基于Sort的Shuffle过程,不再为每个Reduce端的Task生成一个文件,而是根据分区ID进行排序,然后输出到单个数据文件中,并且同时生成对应的索引文件。因此在基于Sort的Shuffle过程中,可以避免基于Hash的Shuffle实现机制的缺陷,更有利于超大规模数据集的处理。
由于最初在Spark中为了避免不必要的排序开销而使用的基于Hash的Shuffle实现机制中存在一定的缺陷,在超大规模数据集的场景下会造成一定的性能瓶颈,对应的优化措施,即在Spark 0.8.1引入的File Consolidation也只是在一定程度上缓解了该问题,并没有彻底解决。因此在SparkSpark 1.1.0版本中,借鉴Hadoop的实现方式,引入了基于Sort的Shuffle实现机制。
基于Sort的Shuffle实现机制在Spark 1.1.0版本中被引进后,在Spark 1.2版本开始替换基于Hash的Shuffle实现机制,将基于Sort的Shuffle实现机制设置为默认方式。即将配置属性“spark.shuffle.manager”从hash换成了sort,对应ShuffleManager的实现类分别是HashShuffleManager和SortShuffleManager。 (www.xing528.com)
在Spark 1.1版本中,Spark借鉴了Hadoop MapReduce的基于Sort的Shuffle过程,不再为每个Reduce端的Task生成一个文件,而是根据分区ID进行排序,然后输出到单个数据文件中,并且同时生成对应的索引文件。在Reduce端获取数据时,会根据该索引文件从数据文件中获取它所需要的数据。因此在基于Sort的Shuffle过程中,可以避免基于Hash的Shuffle实现机制的缺陷,更有利于超大规模数据集的处理。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。