本文共 765 字,大约阅读时间需要 2 分钟。
在Map方法之后,Reduce方法之前的数据处理过程被称为Shuffle。这一过程主要包括以下几个步骤:
在溢写前对环形缓冲区中的数据集进行分区处理。这种分区通常基于键值的分布情况,以确保后续处理的高效性。
在分区完成后,需要对每个分区的数据集进行排序。排序规则与分区方式保持一致,以便于后续的合并和处理。
对于需要汇总操作的数据集,在溢写到磁盘之前,可以利用Combiner对各个分区的数据进行合并。这种方式能够显著减少需要写入磁盘的数据量。
完成分区和排序后,对每个分区的数据集进行归并处理。归并过程中需要对同一分区内的数据进行合并和排序(如果需要的话)。
在数据处理完成后,对数据进行压缩。压缩后的数据将以更高效的方式写入磁盘,以减少存储空间的占用。
最终,将压缩好的数据按分区的方式写入磁盘。这一步骤通常是Shuffle过程中最耗时的部分之一。
在Reduce方法之前,Shuffle过程主要负责数据的预处理和排序工作。其主要步骤包括:
将Map处理输出的同一分区数据拷贝到内存中。如果内存空间不足,超出部分将溢写到磁盘中。同时,为了保证磁盘写入的高效性,可能会启动一个ReduceTask来处理该分区的数据。
将内存和磁盘上的数据集进行归并。每个开启的ReduceTask都会从不同的MapTask拉取相同分区的数据进行合并,并对合并后的总数据集进行排序。
完成归并排序后,对归并好的数据按照相同的键值进行分组。每个分组的数据将等待Reduce()方法的处理,最终会被汇总到同一个ReduceTask中。
转载地址:http://ckeq.baihongyu.com/