我是MapReduce的初学者,目前正在阅读Jimmy Lin和Chris Dyer撰写的“使用MapReduce进行数据密集型文本处理”(link to PDF)
无论如何,本书提供的第一个例子是字数统计算法,我无法理解为什么减速器的最终输出是它的原因。该示例位于文本的第23页,图2.2。根据我的理解,X应为6,Y应为9,Z应为19.
答案 0 :(得分:1)
输入到mapper的输入文件如下所示: Rec1:a,1 Rec2:b,2 Rec3:c,3 Rec4:c,6 Rec5:a,5 Rec6:c,2 Rec7; B,7 Rec8:c,8
记录#1和#2&将由Mapper#1处理。在这个例子中,假设上面的文件存储在4个块中。 Rec#1&第1块中的Rec#2(&)。第二块(&)中的Rec#3和Rec#4。 Rec#5和Rec#6(&)将在第3块。 Rec 7和Rec8将存储在第4块Rec7& Rec8()。
在Map-Reduce框架中,将为每个输入拆分调用一个映射器(逻辑上与块相同)。每个Mapper都将处理输入拆分中的所有记录。
M1将输入(&)并发出as键和1作为值,并将b作为键发出,将1作为值发出。对于M2输入是c,3和c,6并且它发出键为c,值为3,键为c,值为6,依此类推。
然后reducer将接受这些键并执行其处理。
希望这能澄清你的问题。
答案 1 :(得分:0)
我猜你很困惑。图2.2不是字数统计算法的例子。它显示了第34页中描述的Map-Reduce Frame Work的两级处理。映射器和减速器"。图2.2显示了Map-Reduce的简化视图。作者希望通过此图显示Map减少框架工作单词的方式。这显示了如何找到与密钥关联的所有值的最大值。该输出的输出是x = 5(最大值为1.5)等。
如果您想通过map-reduce读取字数统计算法,请查看:
类Mapper 2:方法Map(docid a; doc d) 3:对于所有术语t 2 doc d do 4:发射(术语t;计数1) 1:减速机类 2:方法减少(期限t;计算[c1; c2; :::]) 3:总和0 4:对于所有计数c 2计数[c1; C2; :::]做 5:总和+ c 6:发射(术语t;计数总和) 图2.3:MapReduce中字计数算法的伪代码。映射器发出一个 文档中每个单词的中间键值对。减速器总结了所有计数 每个字。
可能会出现混乱,因为首先粘贴图片并将其编号粘贴在图片的底部。
希望这会有所帮助!!
答案 2 :(得分:0)
后面的一段:
最终输出被写入分布式文件系统,一个 每个reducer的文件。每个文件中的单词将被排序 按字母顺序排列,每个文件大致包含 相同数量的单词。分区器,我们稍后会讨论 在2.4节中,控制对减速器的单词分配。 输出可以由程序员检查或用作输入 到另一个MapReduce程序。
据我所知,示例中的每个Reducer都将其输出写入不同的文件。我同意这应该在之前解释在某些评论中指定的数字。