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