对于MapReduce: Simplified Data Processing

:Dataon Large 这个论文原版的没看,找了几个网上流传的翻译稿,认真看了一遍 。因为内容主要为大数据方面,目前自己还没直接接触到这方面的内容,先记录一下收获,不然用到的时候都忘光了(见笑了 。。)
先记录一下翻译比较好的文章,我自己看着逻辑上没啥大毛病的翻译稿(个人水平有限,别吐槽,见谅 。。。):
第一个是csdn的:
第二个也是csdn的:
实际上这个图就可以帮助我们更好地理解整个系统的工作原理了 。但是整篇论文又从多个角度,用文字详细描述了模型的具体原理和执行过程,可以说非常非常优秀!最起码我这个不懂大数据的人 , 也能大概看懂一点 。
主要包括变成模型的介绍、模型的实现原理、模型优化措施、模型的性能测试案例以及其他的相关介绍 , 论文最后还给出了词频统计的代码 。
一、大概介绍
模型主要是为了解决大数据计算过程中在有限的时间内进行超大数据量以及分布式计算中并行、分发、处理实效等等问题而建立的 。目的是为了让用户可以轻易地并行化大规模计算,并且具备一定的容错机制 。
二、实现原理
实现原理可以从中的1、2、3...等步骤看出一点来 , 大体描述一下的话,我是这么理解的:
1、分片 。谁分?库来分 。怎么分?用户选参数 , 其他的程序搞定 。分完了就安排给手下的设备 。
2、选老大 。设备中有一个被选中了!成了,它给其他小弟分工作 。工作分两种map和,有两组小弟分别去做 。map那组小弟读取给他的分片内容,按照用户定义的函数生成临时键值结果 , 结果太重要了,需要定期写入本地磁盘 。
3、汇报工作 。小弟都由老大调度,还得给老大汇报工作 。老大不信任小弟 , 需要map把工作成果放在那里都告诉他(缓存在本地磁盘上的位置) 。
4、那组需要在map基础上干活 , 当然它也听老大的,老大告诉它:map那组兄弟把货都放在“码头”了 , 你去取一下,然后回去干活 。
5、干活干净利索,它读取了所有的键值对 , 相同键的值就组合一下,再排个序 。然后就把整理好的货给到用户,用户通过函数处理一下,把结果写入最终输出文件 。
6、最后就返回到用户代码了 。一切以用户为核心 , 从用户那来 , 到用户那去 。
除了原理,还有点其他内容:
1、是老大,必须监控小弟工作状态,以及他们工作成果放在那里;
2、小弟挂了怎么办?没事,老大有他们工作成果的位置 , 另找兄弟,接着挂掉的干;
3、老大挂了怎么办?谷歌说了,几率不大,目前的实现上是这样的:真挂了就找找原因 , 从零开始 。
接下来,还说了三点:
1、本地读取数据方面降低了网络带宽消耗;
2、任务颗粒大小有限制,R(任务)是用户选择的,控制M(map)是常用手段,一般把M控制在16 MB到64 MB的输入数据大小范围内;
3、快完成任务的时候 , 把最后几个任务备份到其他兄弟那里同时搞,谁先搞完都算这个任务搞完了(承担最后重任的兄弟心理压力太大了,怕他心理不健康) 。
三、优化模型的措施
这部分就说了一下怎么优化模型的 , 一共说了9个措施 。这9个措施,可能以后自己也用得到,简单概况一下:
1、来分配内容到输出文件的时候 , 可以指定一下分区函数,跟的()有点像;
2、刚才说的的排序,可以理解成强迫症,但是很有用,默认按照递增来排序;
3、用户可以通过函数 , 在传递给之前先进行一下键值合并,这个函数可以由用户指定;
4、库支持以多种不同格式读取输入数据;
5、没看懂;(猜测:有些人想利用一下map和操作的产生的临时文件 。大佬说:反正俺们就输出一个,一般先写到临时文件,全部写完就重命名了 。你们想让俺多给你们几个副本,没门 。最后还加了一句说,实际这个限制没成为问题,不晓得是不是还没人这么要求 。)
6、你要是总犯一个错误,大佬们提供了一种模式 , 总犯一个错误,代码记住了,后期你再犯错直接跳过;
7、你要是在没有分布式条件的情况下想调试代码,大佬们开发了一套可选的库;
8、老大那里有个状态页 , 上面可以显示计算进度、状态、具体输入输出字节等等数据,用户可以据此诊断代码bug;
9、库有个计数工具 , 用户可以用 。
四、性能测试
这块就看看图知道一下结果就阔以了,需要对比的时候可以找原文看配置和过程 。
五、大佬的经验和其他工作
大佬们做了很多工作,发文当时最重要的用途是完全重写了谷歌的线上索引系统 。还有其他的一些信息,请参照原文喽 。
最后:
以上内容是个人理解,不到位的地方请忽略掉 。
【对于MapReduce: Simplified Data Processing】感谢谷歌大佬们的付出,也感谢各位翻译大佬们的辛苦工作,敬礼!