试图理解基本的WordCount MapReduce示例

时间:2016-03-29 16:07:55

标签: java hadoop mapreduce bigdata

最近开始使用Hadoop并努力理解一些事情。这是我正在查看的基本WordCount示例(计算每个单词出现的次数):

Map(String docid, String text):
 for each word term in text:
 Emit(term, 1);

Reduce(String term, Iterator<Int> values):
 int sum = 0;
 for each v in values:
 sum += v;
 Emit(term, sum);

首先,Emit(w,1)应该做什么?我注意到在所有示例中,我看第二个参数总是设置为 1 ,但我似乎无法找到它的解释。

另外,只是为了澄清 - 我是否正确地说 term 是关键,而Reduce中的 sum 形成了键值对(分别)?如果是这种情况,只是从Map发出的每个 term 的1个列表?这是我能理解它的唯一方法,但这些只是假设。

为noob问题道歉,我已经看过教程,但很多时候我发现使用了很多令人困惑的术语,并且整体基本的东西比实际上更复杂,所以我是努力解决这个问题。

感谢任何帮助!

2 个答案:

答案 0 :(得分:3)

  

将此输入作为示例字数输入。

Mapper会将这句话分成单词。

Take,1
this,1
input,1
as,1
an,1
example,1
word,1
count,1
input,1

然后,减速器接收&#34;组&#34;相同的单词(或)和分组值的列表,如此(并另外对键进行排序,但这对于此示例并不重要)

Take, (1)
this, (1)
input (1, 1)
etc...

正如您所看到的,关键input已被减少&#34;在单个元素中,你可以循环并对值求和并像这样发出

Take,1
this,1
input,2 
etc...

答案 1 :(得分:2)

好问题。

如上所述,映射器输出一系列(key, value)对,在这种情况下,每个单词的格式(word, 1),缩减器收到的分组为(key, <1,1,...,1>),总结条款在列表中并返回(key, sum)。请注意,不是执行分组的reducer;这是map-reduce环境。

map-reduce programming model与我们习惯使用的不同,而且在这个模型中如何实现算法通常并不明显。 (例如,考虑一下如何实现k-means聚类。)

我推荐Leskovec等人免费提供的Mining of Massive Data Sets book第2章。另请参阅the corresponding slides