例如,假设您想计算一个巨大的名称文件中包含的名称。您可以很容易地将文件分割成若干个块,并将其发送到Map器,Map器输出到单个reducer,该reducer将输出包含结果列表的单个文件。听起来不错!
现在,两个(或更多)减速器如何帮助这一过程变得更快?据我所知,所有的Map程序都会向每个reducer发送自己的数据,以便对其进行缩减,每个reducer都会输出自己的文件和结果。因此,在一个作业中(例如2个减速机),系统内传输的数据将乘以减速机的数量,所有减速机的输出将完全相同(希望如此)。在其他情况下,是否值得拥有多个减速器?
似乎我遗漏了一些东西,我真的很感谢你对这个主题的一个小的解释或一些指导。谢谢你的时间。
2条答案
按热度按时间jjjwad0x1#
你的困惑在于mapreduce是如何工作的。我将试着遵循你提供的相同的例子,以便有一个小的解释来澄清你的疑虑。
有两个或更多的减速机的想法是因为你不想把所有的信息都发送到一台机器上。因此,如果您最初将10条记录发送到一个reducer,那么现在如果您有2个reducer,那么流程将分别发送5条记录(最好的情况是,这取决于您的哈希函数)。每个reducer都将获得自己的数据共享。
按照您提供的相同示例,假设您正在使用组合器,这样Map器将发送元组,如(我知道我们可以使用组合器,这只是一个示例):
(约瑟夫,1)(乔治,1)(安德鲁,1)(约瑟夫,1)(乔治,1)(安德鲁,1)(阿尼巴尔,1)(玛丽,1)(安德鲁,1)(迈克尔,1)
如果使用1减速机,则所有这些记录都将发送到同一减速机,因此单个输出为:
如果您使用的是2reducer,在最好的情况下,每个reducer都将获得自己的数据共享,例如:
在这种情况下,您将得到2个输出,即:
注意,我假设键是找到的名称,您想要的输出只是计算文件中的名称数。
8wigbo562#
@dbustosp解释得很好。
我想加一张图表,以澄清你的疑问。
从上图可以看出,您在reducer端也实现了并行处理,这将使您获得与单个reducer相比的高吞吐量。