【发布时间】:2017-03-03 19:15:21
【问题描述】:
例如,假设您要计算包含在一个巨大名称文件中的名称。您可以轻松地将文件拆分为多个块,然后将其发送到映射器,然后映射器输出到单个 reducer,然后再输出包含结果列表的单个文件。听起来很整洁!
现在两个(或更多)减速器将如何帮助这个过程变得更快?据我所知,所有映射器都将自己的数据发送给每个减速器,以便对其进行简化,并且每个减速器都将输出其自己的文件及其结果。因此,在一项工作中 - 例如使用 2 个减速器 - 系统内传输的数据将乘以减速器的数量,并且所有减速器的输出将完全相同(希望如此)。其他一些实例拥有多个减速器是否值得?
似乎我遗漏了一些东西,我真的很感激关于这个主题的一个小的解释或一些指导。感谢您的宝贵时间。
【问题讨论】:
-
我认为您对 MapReduce 有一些困惑。拥有 2 个或更多 reducer 背后的想法是因为您不希望折叠一台将所有信息发送给它的机器。因此,如果您最初向一个 reducer 发送 10 条记录,现在如果您有 2 个 reducer,则该过程将分别发送 5 条记录(最好的情况,这取决于您的哈希函数)
-
感谢您的回答。因此,如果我想在我的示例中使用 2 个 reducer,我只需使用自定义 Partitioner 拆分从映射器输出的数据,每个 reducer 都会获得它的份额(相当于两个系统减少自己的数据集?)并且它们的输出合并到底 !因此,这将产生更好的性能。到目前为止我的推理是否正确?