0%

Map - Reduce

这是一个分布式思维。

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 来分配任务,让节点单独的处理子任务,最后综合。

请我喝杯咖啡吧~