提问者:小点点

我们真的需要在MapReduce框架中进行排序吗?


我对MapReduce是完全陌生的,只是无法根据每个分区中的键对映射器输出进行排序。最终,我们想要的只是将一个减速器送入一个由几对组成的分区

为此,在任何阶段都需要进行sort。我们不能使用哈希表对对应于同一键的值进行分组吗?

分解每个阶段。在映射器阶段,对于每个输出对,我们只需散列键以找到分区号,然后将相应的对附加到属于同一分区的所有此类对的链表中。所以最后,单个映射器获得的输出将是一个hashtable。其中对于每个分区号,我们都有一个的链表

然后来自不同映射器任务的分区被打乱到一个还原器。我们现在需要确保我们首先对对应于同一个键的所有值进行分组(一种合并),然后提供这些合并对的

已经过了链接(目前无法评论线索,单独写了一个问题。)置顶回答提到

排序为减速机节省了时间,帮助它轻松区分何时应该开始新的减少任务。简单地说,它只是在排序输入数据中的下一个键与上一个键不同时启动一个新的减少任务。每个减少任务都需要一个键值对列表,但它必须调用减少()方法,该方法接受一个键列表(值)输入,因此它必须按键对值进行分组。如果输入数据在映射阶段被预排序(本地),在减少阶段被简单地合并排序(因为减速机从许多映射器获取数据),这很容易做到

但是我们可以通过使用哈希表来做同样的事情,或者我们不能?


共1个答案

匿名用户

嗯,是的,只要一切都适合内存,你可以使用哈希表。但是一旦你处理的数据量超过了计算机的内存容量,你就有问题了。

解决方案是将数据输出到磁盘文件并进行外部排序。