首页 理论教育 Hash算法优化Shuffle操作

Hash算法优化Shuffle操作

时间:2023-06-29 理论教育 版权反馈
【摘要】:在Spark 1.1之前,Spark中只实现了一种Shuffle方式,即基于Hash的Shuffle。Spark之所以一开始就提供基于Hash的Shuffle实现机制,其主要目的之一就是为了避免不必要的排序。但基于Hash的Shuffle实现机制在处理超大规模数据集时,由于过程中会产生大量的文件,导致过度的磁盘I/O开销和内存开销,会极大地影响性能。因此,在Spark 1.2版本中修改为默认基于Sort的Shuffle实现机制时,同时也给出了特定应用场景下回退的机制,具体可以参考7.4节基于Sort的Shuffle实现机制。

 Hash算法优化Shuffle操作

在Spark 1.1之前,Spark中只实现了一种Shuffle方式,即基于Hash的Shuffle。在Spark 1.1版本引入了基于Sort的Shuffle实现方式后,并且在Spark 1.2版本之后,默认的实现方式从基于Hash的Shuffle修改为基于Sort的Shuffle实现方式,即使用的ShuffleManager从默认的hash修改为sort。

Spark之所以一开始就提供基于Hash的Shuffle实现机制,其主要目的之一就是为了避免不必要的排序(这也是Hadoop Map Reduce被人所诟病的地方,将Sort作为固定步骤,导致了许多不必要的开销)。但基于Hash的Shuffle实现机制在处理超大规模数据集时,由于过程中会产生大量的文件,导致过度的磁盘I/O开销和内存开销,会极大地影响性能。

但在一些特定的应用场景下,采用基于Hash的实现Shuffle机制的性能会超过基于Sort的Shuffle实现机制。关于基于Hash与基于Sort的Shuffle实现机制的性能测试方面,可以参考Spark创始人之一ReynoldXin所给的测试:“sort-basedshuffle has lower memory usage and seems to outperformhash-based in almost allof our testing”。(www.xing528.com)

相关数据可以参考https://issues.apache.org/jira/browse/SPARK-3280。

因此,在Spark 1.2版本中修改为默认基于Sort的Shuffle实现机制时,同时也给出了特定应用场景下回退的机制,具体可以参考7.4节基于Sort的Shuffle实现机制。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈