理解mapreduce示例

taor4pac  于 2021-06-04  发布在  Hadoop
关注(0)|答案(3)|浏览(382)

我是mapreduce的初学者,目前正在阅读jimmy lin和chris dyer的书《使用mapreduce进行数据密集型文本处理》(链接到pdf)
无论如何,这本书提供的第一个例子是字数计算算法,我很难理解为什么减速机的最终输出是这样的。示例见正文第23页,图2.2。据我所知,x应该是6,y应该是9,z应该是19。

dohp0rv5

dohp0rv51#

我猜你是糊涂了。图2.2不是字数计算算法的示例。它显示了“Map器和还原器”一节中描述的Map还原框架的两级处理。图2.2显示了Map缩小的简化视图。作者想用这个图来说明map是如何减少框架词的,以及如何在所有与键相关的值中找到最大值。也就是说y的输出是x=5(最大值为1,5)等等。
如果您想通过map reduce读取字数计算算法,请查看:
类Map器2:方法Map(docid a;doc d)3:对于所有术语t 2 doc d do 4:发射(术语t;计数1)1:类还原2:方法还原(术语t;计数[c1;c2;:])3:和0 4:对于所有计数C2计数[c1;c2;:]do 5:总和+c 6:发射(t项;count sum)图2.3:mapreduce中单词计数算法的伪代码。Map器为文档中的每个单词发出一个中间键值对。减缩器将每个单词的所有计数相加。
可能会出现混淆,因为图片是先粘贴的,其编号粘贴在图片的底部。
希望这有帮助!!

sauutmhj

sauutmhj2#

后面一段:
最终输出写入分布式文件系统,每个reducer一个文件。每个文件中的单词将按字母顺序排序,每个文件包含的单词数量大致相同。我们稍后将在第2.4节中讨论的partitioner控制单词到reducer的赋值。输出可以由程序员检查,也可以用作另一个mapreduce程序的输入。
据我所知,示例中的每个reducer都将其输出写入不同的文件。我同意这一点,应该解释之前的一些意见中指定的数字。

vh0rcniy

vh0rcniy3#

输入到mapper的文件如下:rec1:a、1 rec2:b、2 rec3:c、3 rec4:c、6 rec5:a、5 rec6:c、2 rec7;b、 7.8:c,8
记录#1和#2&将由Map器#1处理。在本例中,假设上述文件存储在4个块中。第1区1号和2号记录(&)。第二区(&)的3号记录和4号记录。记录5和记录6(&)将在第三个街区。rec 7和rec8将存储在第4块rec7和rec8()。
在MapReduce框架中,将为每个输入分割调用一个Map器(逻辑上与块相同)。每个Map器将处理输入分割中的所有记录。
m1将接受(&)的输入,发出a作为键,1作为值,发出b作为键,1作为值。对于m2,输入是c,3和c,6和,它发出键为c,值为3,键为c,值为6,依此类推。
然后reducer将接受这些键并执行其处理。
希望这能澄清你的问题。

相关问题