一、重点内容
1.举个例子:Word count是如何实现的?
2.MapReduce执行流程,还有具体工作细节以及容错方案等。
3.对于其工作流程的优化以及完善。
二、详细知识点介绍
1.摘要
MapReduce是一个编程模型,也是一个处理和生成超大数据集的算法模型的相关实现。用户首先创建一 个Map函数处理一个基于key/value pair的数据集合,输出中间的基于key/value pair的数据集合;然后 再创建一个Reduce函数用来合并所有的具有相同中间key值的中间value值。现实世界中有很多满足上述 处理模型的例子,本论文将详细描述这个模型。
2.Word Count解释
来到我们的Word count例子。我们要统计“MapReduce is a programming model, a ...”这句话的单词个数,我们很容易地会想到使用例如java中的HashMap来实现统计。得到<"MapReduce", 1>, <"is", 1>, <"a", 2>, <"programming", 1>, <"model", 1>这样一个HashMap。
当数据量比较小时,比如1MB, 1GB时,数据还能够在单机进行处理,但是如果数据量上升到1GB, 1TB... 之后,就需要集群等其它方式来进行处理。
图中我们可以看到
1.首先,我们将输入地文本划分成了3个部分,这样就可以分配给三台主机进行处理。
2.将每个部分地文本划分成单词,我们就可以实现单词的遍历。
3.将每一个单词构建成为一个<Key, value>键值对,例如<Dear, 1>键值对。
4.shuffle,洗牌。也就是将key相等的键值对发送到对应机器上进行处理。
5.reducing,减少。将多个键值对合并成一个键值对。变成了<key, 对应总共出现的次数>。
(论文中的函数)
3.MapReduce运行原理
可以和上面的word count例子进行对比,这里出现了Master节点,它的任务就是给其它机器进行集中管理并分配任务。具体步骤如下:
1.将整个文件分割成16-64MB带下的文件,然后再不同机器上执行。
2.其中一台机器变成master,剩下的成为worker。master给空闲的worker指定任务(有map任务和reduce任务)。
3.worker接收到切分的input之后,执行map函数,将结果缓存到内存中。
4.缓存后的中间结果会周期性地写到本地磁盘,并切分成R分(reduce数量)。R个文件地位置会发送给master。master会分配给reducer。上图中将文件切分成了2块,并分给了这两个执行reduce工作地worker。
5.map端的shuffle操作。map任务的结果不会立即写入到磁盘中,而是会写到一个叫唤醒内存缓冲区的地方。缓冲区默认大小为100MB,当写入达到80%的阈值时,会启动一个线程将缓冲区里的文件写到磁盘当中的临时文件,而这个线程会执行一个排序sort和一个合并combine操作。整个spill工作完成之后,会对所有临时文件进行sort和combine来减少最终输出的大小。
6.进行Reduce工作的worker收到中间文件的位置信息之后,通过RPC读取,读取完成后先根据中间<k, v>排序sort,然后按照key分组合并combine。
7.reduce端在排序后的数据上迭代,将中间<k ,v>交给reduce函数进行处理,最终结果写给对应的output文件(分片)。
8.所有的文件会写到一个GFS的文件系统上,完成所有操作后,master会返回给user的一个响应。
Master数据结构:
Task分为idle, in-process, completed三种状态。
容错机制:
Master每隔一段时间向worker发送ping(心跳检测)
如果worker失联一段时间,master将worker标记成failed
worker失效之后:
- 已完成的map task被重新标记成idle, 因为map的结果被卸载local disk(无法被读取)
- 已完成的reduce tack不需要改变, 因为reduce的结果存储在GFS(已经存储完毕)
- 当一个map任务先被A执行,后被B执行(A失效)。所有reducer会收到通知,然后从B读取数据。
master失效之后:
- 周期性地备份master数据(checkpoint)
- 当master宕机之后,新的master状态从最后一的checkpoint开始恢复
combiner function 以word count为例,单词频率符合Zipf分布,说明会有大量的<the, 1>的中间结果。例如map的中间结果可能包含10万个<the, 1>键值对。通过combiner可以将结果压缩成<the, 100000>。大大减少了网络带宽的消耗。(一般情况下,combiner和reducer使用的代码一样)
三、引用参考
MapReduce Word Count | Guide to MapReduce Word Count | Examples (educba.com)
rfeet.qrk (mit.edu)