Oct. 27, 2021
Here is the article.
实际上这个图就可以帮助我们更好地理解整个系统的工作原理了。但是整篇论文又从多个角度,用文字详细描述了MapReduce模型的具体原理和执行过程,可以说非常非常优秀!最起码我这个不懂大数据的人,也能大概看懂一点。
主要包括变成模型的介绍、模型的实现原理、模型优化措施、模型的性能测试案例以及其他的相关介绍,论文最后还给出了词频统计的代码。
一、大概介绍
MapReduce模型主要是为了解决大数据计算过程中在有限的时间内进行超大数据量以及分布式计算中并行、分发、处理实效等等问题而建立的。目的是为了让用户可以轻易地并行化大规模计算,并且具备一定的容错机制。
二、实现原理
实现原理可以从Fingure1中的1、2、3...等步骤看出一点来,大体描述一下的话,我是这么理解的:
- 分片。谁分?库来分。怎么分?用户选参数,其他的程序搞定。分完了就安排给手下的设备。
- 选老大。设备中有一个被选中了!成了master,它给其他小弟分工作。工作分两种 map 和reduce,有两组小弟分别去做。map那组小弟读取给他的分片内容,按照用户定义的函数生成临时键值结果,结果太重要了,需要定期写入本地磁盘。
- 汇报工作。小弟都由老大调度,还得给老大汇报工作。老大不信任小弟,需要 map 把工作成果放在那里都告诉他(缓存在本地磁盘上的位置)。
- reduce 那组需要在 map 基础上干活,当然它也听老大的,老大告诉它:map那组兄弟把货都放在“码头”了,你去取一下,然后回去干活。
- reduce干活干净利索,它读取了所有的键值对,相同键的值就组合一下,再排个序。然后就把整理好的货给到用户,用户通过reduce函数处理一下,把结果写入最终输出文件。
- 最后就返回到用户代码了。一切以用户为核心,从用户那来,到用户那去。
除了原理,还有点其他内容:
- master是老大,必须监控小弟工作状态,以及他们工作成果放在那里;
- 小弟挂了怎么办?没事,老大有他们工作成果的位置,另找兄弟,接着挂掉的干;
- 老大挂了怎么办?谷歌说了,几率不大,目前的实现上是这样的:真挂了就找找原因,从零开始。
接下来,还说了三点:
- 本地读取数据方面降低了网络带宽消耗;
- 任务颗粒大小有限制,R(reduce 任务)是用户选择的,控制 M(map)是常用手段,一般把 M 控制在16 MB 到 64 MB 的输入数据大小范围内;
- 快完成任务的时候,把最后几个任务备份到其他兄弟那里同时搞,谁先搞完都算这个任务搞完了(承担最后重任的兄弟心理压力太大了,怕他心理不健康)。
- reduce来分配内容到输出文件的时候,可以指定一下分区函数,跟 Python 的 sorted()有点像;
- 刚才说的 reduce 的排序,可以理解成强迫症,但是很有用,默认按照递增来排序;
- 用户可以通过 combiner 函数,在传递给 reduce 之前先进行一下键值合并,这个函数可以由用户指定;
- MapReduce 库支持以多种不同格式读取输入数据;
- 没看懂;(猜测:有些人想利用一下 map 和 reduce 操作的产生的临时文件。大佬说:反正俺们就输出一个,一般先写到临时文件,全部写完就重命名了。你们想让俺多给你们几个副本,没门。最后还加了一句说,实际这个限制没成为问题,不晓得是不是还没人这么要求。)
- 你要是总犯一个错误,大佬们提供了一种模式,总犯一个错误,代码记住了,后期你再犯错直接跳过;
- 你要是在没有分布式条件的情况下想调试代码,大佬们开发了一套可选的MapReduce库;
- master 老大那里有个状态页,上面可以显示计算进度、状态、具体输入输出字节等等数据,用户可以据此诊断代码 bug;
- MapReduce库有个计数工具,用户可以用。
————————————————
版权声明:本文为CSDN博主「我是码代码」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yimuta9538/article/details/103858509
————————————————
版权声明:本文为CSDN博主「我是码代码」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yimuta9538/article/details/103858509
No comments:
Post a Comment