7.4 MapReduce简单实例1:WordCount

一、任务描述

目标是词频统计,即统计输入文本各单词的出现的次数。

二、可行性分析

并不是所有问题都适合MapReduce来解决。MapReduce的处理策略是“分而治之”,即把大块切分成小块然后放在不同的机器上执行。所以最重要的一点是数据彼此之间不依赖对方输出的结果。词频统计问题显然是满足这个特点的,所以可以用MapReduce来处理。

三、执行过程分步

假设待分析文本如下

Hello World Bye World
Hello Hadoop Bye Hadoop
Bye Hadoop Hello Hadoop

则执行过程如下

1. Split&RR

把原数据拆分为Split,然后RR转换为key-value格式,即可输入Map。对本例,可把行号作为key,把那一行的文本作为value,则Split&RR结果为

<1, "Hello World Bye World">
<2, "Hello Hadoop Bye Hadoop">
<3, Bye Hadoop Hello Hadoop">

2. Map

Split结果也就是Map的输入,而Map函数的逻辑设计为每遇到一个单词,就输出一个此单词为key、1为value的键值对。因此每个Split输入最终输出都是key-value组成的列表,如下图所示

3. Shuffle

对Map输出做Shuffle,结果会得到一个个<key,value-list>,也就是把拥有相同key的value归并起来(注意只发生在每个Map中,Map间不做数据交互)。对于本例子,如果不对Map输出做合并操作,则shuffle的结果如下

4. Reduce

Shuffle后的结果发送给Reduce任务作为输入。本例我们只有一个Reduce任务,它将各Map获得的数据汇总,函数逻辑就是把相同key的value做sum(即每个单词的频率),最终输出一个个key-value,如下图

四、完整执行过程

综上,完整过程如下图

如果在Shuffle时做合并操作,则过程是


即每个value list都先做了求和,但最终Reduce的结果是一样的。

Reference:
https://www.icourse163.org/learn/XMU-1002335004#/learn/content?type=detail&id=1214310154&sm=1

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容