排序—mapreduce分区内的数据是否已排序,如果是,如何排序?

xiozqbni  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(353)

mapreduce分区内的数据是否已排序?如果是,如何排序?好吧,它是按键分组的。如果它在内部排序,那么对所有分区中的所有数据进行排序不是一种开销吗?

ncecgwcz

ncecgwcz1#

如果您讨论的是Map程序作为输入接收的输入拆分,那么没有;它们不会被排序,因为这确实会产生不必要的开销。
排序在map阶段结束之前开始(仅当使用了reducer时),因此reduce函数的输入被排序。指定哪个reducer将处理Map器的输出的条件由partitioner定义。hashpartitioner(默认情况下使用的partitioner的实现)散列Map器的输出键,并将它们发送到对应于特定散列值的缩减器(这里是进行分组时的情况)。
排序实际上是reduce阶段的第二个过程,在洗牌a.k.a.复制(即获取Map器的输出)之后,在实际运行reduce函数之前,它是基于键的。它可以被认为是一个类似于merge-sort的进程,它合并Map器的排序输出。
你可以在汤姆·怀特的书《hadoop:权威指南》中找到更多的细节。以下是我所描述的示意图:

相关问题