一个专注于大数据技术架构与应用分享的技术博客

Spark 2.1.0 中 Sort-Based Shuffle 产生的内幕

Spark 2.1.0 中 Sort-Based Shuffle 产生的内幕

背景

Spark作为一个非常著名的开源分布式计算框架,其在数据处理和分析领域已经得到了广泛的应用。其中Shuffle是实现分布式计算的核心机制之一,相较于Hadoop MapReduce的迭代式计算方式,Spark的Shuffle机制使用了更为高效的流水线式计算方式。而Shuffle的处理过程需要进行数据的分组、排序等操作,这些操作的实现涉及到了底层算法的设计及实现。

本文将阐述Spark 2.1.0中Sort-Based Shuffle机制的原理及其内部实现细节,帮助读者深入理解分布式计算中的Shuffle机制。

Sort-Based Shuffle原理

Spark 2.1.0中的Sort-Based Shuffle机制采用了和MapReduce中相同的思路:即将数据根据指定的key进行分组、排序,将相同key的数据在同一节点上聚合,最后输出到指定的reduce节点进行计算。

Sort-Based Shuffle的处理流程如下:

  1. 将map输出的key-value对按照key进行分区,每个Partition中的数据通过一个排序算法按照key进行排序(默认使用的是Timsort算法)。
  2. 将每个Partition中相同key的value进行合并,在同一节点上生成输出文件。
  3. 将生成的中间文件根据每个reduce所需的Partition进行拷贝,并根据key进行合并,最后将结果写入到reduce的输入缓存中。

Sort-Based Shuffle区别于MapReduce的Shuffle的地方在于,Sort-Based Shuffle没有将所有Mapper的结果都写到磁盘上,从而避免了全局排序的开销。这样,在Mapper的shuffle阶段和reduce的shuffle阶段只有2n次IO读写,可以极大地降低计算的延迟和网络传输的带宽占用。

协同处理器在Sort-Based Shuffle中的应用

事实上,Spark 2.1.0中的Sort-Based Shuffle机制已经不再使用Timsort算法,而是采用了基于协同处理器的外排序算法,这一算法具有以下几个优点:

  1. 基于协同处理器的算法可以大大降低排序时间,通常情况下,排序过程时间可以降低50%甚至更多。
  2. 在Map端的Shuffle操作中,协同处理器可以并发地对每个Partition的数据进行排序,大大提高了排序的Parallelism性能。
  3. 在Reduce端的Shuffle操作中,协同处理器可以发挥自身的缓存容量,优化磁盘IO和网络IO的效率,从而极大地提高了IO性能。

Sort-Based Shuffle实现细节

Spark 2.1.0中的Sort-Based Shuffle具体的实现细节如下:

  1. Spark对Sort-Based Shuffle的实现使用了基于内存、磁盘、网络等多级缓存的机制,在处理类似海量数据的情形时具有很高的扩展性和性能。
  2. Spark提供了ConfigurableShuffleSpillWriter用来控制Shuffle写入磁盘的缓冲区大小和排序的算法类型。
  3. Spark中采用Tungsten-sort算法是指在排序过程不使用Java中的Object对象,取而代之的是使用Unsafe API来读写内存,从而达到避免GC的效果。而在基于协同处理器的外排序算法中,则使用了Spark自带的bytesToBytesSort和UnsafeSorter两个算法来进行排序。

总结

通过以上的讨论,我们可以看出Sort-Based Shuffle机制对于分布式计算来讲,是一种非常高效、灵活的Shuffle算法。其主要表现为底层的排序算法的选择、基于内存和多级缓存进行缓存操作等细节,可以在海量数据处理场景下保证数据处理的效率和性能。

虽然Spark 2.1.0中的Sort-Based Shuffle已经使用了基于协同处理器的外排序算法,但是值得注意的是,这个算法在处理不同的数据类型时,性能差异可能比较大,还需要根据不同的数据类型进行优化。因此,在使用Sort-Based Shuffle时,需要根据实际业务场景进行适当的参数配置和优化。

赞(0)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《Spark 2.1.0 中 Sort-Based Shuffle 产生的内幕》
文章链接:https://macsishu.com/spark-210-sort-based-shuffle-insider
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。