这是一个分布式思维。
Map阶段
通过 Hash 函数将一个大任务分成子任务,同样 Hash 值的任务会被分到一个节点上进行处理。
Reduce阶段
是子任务的并发处理,然后合并结果。
难度
Map - Reduce 的难度不在于写代码,而在于工程上的处理。
1. 机器节点可能会坏掉,所以要考虑备份,分布式存储的设计细节,以及容灾策略
2. 让用户使用 N 多个电脑的时候,和使用 1 台电脑的感觉是一样的
3. 任务分配策略与任务进度跟踪细节,因为不同的电脑在性能、网络、任务量是存在差别的
4. 多用户权限控制
本质
1. 分而治之。通过 Hash 函数将大任务分流到机器
2. 常用 hashMap 和 bitmap
难度在于:通讯、时间和空间的估算
案例
问题描述:
用 Map - Reduce 方法统计一篇文章中每个单词出现的次数
第一步 预处理
首先去掉文章中的标点符号
对于连词处理,比如 all-in
对于所写的处理,比如 I'm
大小写的转换
。。。
得到只包含相互独立的单词文本
Map-Reduce阶段
对每个单词都生成词频为 1 的记录,如 ( dog , 1 )
通过 Hash 函数得到每个单词的哈希值,并根据该值分成若干个子任务。所以,相同单词会分配到一个节点中,最后将节点综合。这个思想加速的是每个节点会自行相加单词词频,而主机只是分配任务罢了。
在这里我们也可以将一大段语句通过 Hash 来分配任务,让节点单独的处理子任务,最后综合。