本文参考自b站视频深入浅出讲解 MapReduce_哔哩哔哩_bilibilihttps://www.youtube.com/watch?v=Rz8JCS9TfOQhttps://www.bilibili.com/video/BV1Vb411m7go强推, 建议一定看到最后!
目录
问题的起源
在处理大数据问题时, 如果你有很多数据(例如1TB), 你要对这个数据进行操作呢, 例如最简单的增, 删, 查, 改, 或者较复杂的, 统计单词数, 建立倒排索引。不管哪种操作,都会有大量的开销, 所以这时就出现了MapReduce, 它的主要思想是分治法
MapReduce的两个函数
顾名思义, MapReduce就是由两个最核心的函数组成的: map函数和reduce函数
- map函数就是拆分, 例如把一辆汽车map成很多有用的零件: 输入就是一辆汽车, 输出就是很多零件
- reduce函数就是组装, 例如把汽车的零件和其他机械的零件reduce成一个变形金刚, 输入就是各种零件, 输出就是变形金刚
理解了两个核心函数, 我们来看看MapReduce的整个过程
MapReduce的过程
MapReduce的过程分为六个阶段:
- input 输入数据
- split 对数据进行有依据的分组
- map 把分组之后的数据拆分/映射为其他的新数据
- shuffle 把新数据在本地分别有序储存起来
- reduce 把shuffle后各处的数据放在一起进行组装
- finalize 输出组装后的数据
下面是一个厨房做菜的栗子
- input 拿到了很多食物原料
- split 各个厨师取用不同的原料
- map 厨师们把拿到的原来切碎处理
- shuffle 切好的的食材各自放进微波炉, 烤箱等机器中
- reduce 熟透了的事务进行组合成为菜品
- finalize 菜品呈现给顾客
了解了MapReduce的基本流程之后, 可以看看下面给出的两个应用实例
1. 统计单词数
- input 输入是很多个英语句子
- split 对每个句子分开操作
- map 把每个句子拆分成一个一个的单词
- shuffle 对所有的单词排序, 相同的单词放在一起
- reduce 相同的单词组合成一个, 并计算个数
- finalize 输出就是每个单词的个数
2. 建立倒排索引
什么是倒排索引? 记录很多本书中出现的单词的时候
如果记录的是每个句子中出现了哪些单词(先找句子再找单词), 那么这是正排索引
如果记录的是每个单词分别出现哪些句子里(先找单词再找句子), 那么这就是倒排索引
- input 输入是很多个英语句子
- split 对每个句子分开操作
- map 把每个句子拆分成一个一个的单词, 记录这些单词是出现在哪些句子里
- shuffle 对所有的单词排序, 相同的单词放在一起
- reduce 不同的单词组合成一个, 并计算分别出现在哪些句子里
- finalize 输出就是每个单词在那几个句子里