比如说,你想要计算一个巨大的名字文件中包含的名字。您可以轻松地将文件拆分为多个块,将其发送给映射器,映射器输出到单个reducer,后者将输出包含结果列表的单个文件。听起来很整洁!
现在两个(或更多)减速器如何帮助这个过程变得更快?据我所知,所有映射器都会向每个reducer发送自己的数据,以便减少它,每个reducer都会输出自己的文件及其结果。因此,在工作中 - 例如2个减速器 - 系统内传输的数据将乘以减速器的数量,并且所有减速器的输出将完全相同(希望如此)。对于其他一些实例来说,有多个减速器是否值得?
好像我错过了一些东西,我真的很感激有关这个主题的小解释或指导。谢谢你的时间。
答案 0 :(得分:2)
您的困惑是关于 MapReduce 的工作原理。我将尝试按照您提供的相同示例,以便有一个小解释来澄清您的疑虑。
拥有2个或更多减速器背后的想法是因为您不希望折叠一台机器向其发送所有信息。因此,如果您最初向一个reducer发送10条记录,那么现在如果您有2个reducer,则该进程将分别发送5条记录(最好的情况,取决于您的哈希函数)。每个reducer都会获得自己的数据份额。
按照您提供的相同示例,假设您正在使用合并器,以便映射器将发送元组(我知道我们可以使用合并器,这只是一个示例):
(约瑟夫,1) (乔治,1,) (安德鲁,1) (约瑟夫,1) (乔治,1,) (安德鲁,1) (Anibal,1) (玛丽,1岁) (安德鲁,1) (迈克尔,1)
如果您使用1Reducer,所有这些记录将被发送到同一个reducer,因此单个输出将是:
> 10
如果您使用2Reducers,在最好的情况下,每个reducer都会获得自己的数据共享,例如:
Reducer1
(Joseph, 1)
(Joseph, 1)
(Andrew, 1)
(Andrew, 1)
(Andrew, 1)
Reducer2
(George, 1,)
(George, 1,)
(Anibal, 1)
(Mary, 1,)
(Michael, 1)
对于这种情况,您将获得2个输出,即:
> 5
> 5
请注意,我假设密钥将是找到的名称,您想要的输出只计算文件中的名称数。
答案 1 :(得分:0)