【发布时间】:2014-11-20 04:05:06
【问题描述】:
mapreduce 分区内的数据是否已排序,如果是,如何排序? AFAIK,它是根据密钥分组的。如果是内部排序,对所有分区内的所有数据进行排序不是开销很大吗?
【问题讨论】:
标签: sorting hadoop mapreduce shuffle partition
mapreduce 分区内的数据是否已排序,如果是,如何排序? AFAIK,它是根据密钥分组的。如果是内部排序,对所有分区内的所有数据进行排序不是开销很大吗?
【问题讨论】:
标签: sorting hadoop mapreduce shuffle partition
如果您谈论的是映射器作为输入接收的输入拆分,那么不是;它们没有排序,因为这确实会产生不必要的开销。
排序在map阶段结束之前之前开始(仅当使用reducer时),因此reduce函数的输入被排序。 Partitioner 定义了指定哪个reducer 将处理映射器的输出的标准。 HashPartitioner(默认使用的 Partitioner 的实现)对映射器的输出键进行哈希处理,并将它们发送到与特定哈希值对应的化简器(所以这里是 分组 发生的时间)。
排序实际上是reduce阶段的第二个过程,在shuffle又名copying(即获取映射器的输出)之后和之前实际运行 reduce 函数,它基于键。它可以被认为是一个类似合并排序的过程,它合并了映射器的排序输出。
您可以在 Tom White 的书“Hadoop:权威指南”中找到更多详细信息。这是我所描述的示意图:
【讨论】: