在Shuffle和Sort之后要减少n条记录



我只想将排序/洗牌后输出的前10条记录移动到减速器。这可能吗?

原因是:我要在一个文件中找到计数最大的最小10个项目。然而,我知道映射阶段的结果将到达已经排序的减速器。因此,我不想在映射器中进行排序,而是只将"shuffle and sort"之后的前10行传递给reducer。这将允许reducer只对原始记录的一个子集进行排序。

有什么办法可以做到吗?

您可以通过为作业编写自定义Combiner来实现这一点。

MapReduce作业的不同阶段是:

Mapper -> Partitioner -> Sorting -> Combiner -> Reducer.

现在Combiner逻辑只读取前10 (n)条记录,而不协调所有其他记录。Reducer将只接收来自每个Mapper/Combiner的10条记录。


@K246提供的注释:

From haodop definitive guide(第4版):在写入磁盘之前,线程首先将数据划分为与它们最终将被发送到的reducer对应的分区。在每个分区中,后台线程按键在内存中执行排序,如果存在组合函数,则在排序的输出上运行该函数。

当你在文件中说至少10…是针对每个映射器还是针对整个输入。如果对于每个映射器,那么您必须从所有映射器中再次聚合reducer。然后,正如@YoungHobbit指出的那样,Combiner将完成这项工作。

如果你需要至少10个从整个输入文件,那么我认为,你需要处理它与一个单一的减速器和相应的输出。

同样,您在上一行中说过,reducer将只对子集进行排序。你的意思是你在Reducer中再次排序,或者在Reducer中只对输入的子集执行一些逻辑。

相关内容

  • 没有找到相关文章

最新更新