- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第9章互联网分布式系统的数据资源存储与管理---KeyValue存储模式
9.4 基于MapReduce并行编程的海量数据处理 ?9.4.1 计算模式 (1)“PC Cluster”与并行计算 并行计算范型下软件连同数据同时运行在网络中许多台计算机上。PC Cluster指其中单个计算机可以是一台廉价的PC 机。通过增加PC机来扩大节点规模比较容易;当节点规模很大时, 节点失效成为常态,PC Cluster易于替换失效节点,提升容错能力。 (2)Google集群和并行数据处理系统 使用廉价的Linux PC机组成集群;解决方案针对超大文件的访问,读操作比例远超过写操作,PC机极易发生故障造成节点失效等问题; GFS(Google File System)分布式文件系统:把文件分成64MB的块,分布在集群的机器上,使用Linux的文件系统存放。同时每块文件至少有3份以上的冗余。中心是一个Master节点,根据文件索引,找寻文件块。隐藏下层负载均衡,冗余复制等细节,对上层程序提供一个统一的文件系统API接口; MapReduce:Map是把输入分解成中间的Key/Value值对,Reduce把Key/Value值对合成最终输出。Map和Reduce操作被分布在集群上运行,结果存储在GFS上; * BigTable:一个大型的类Key/Value型分布式数据库,对应一个巨大的表格,构建于GFS之上,具有很好的可伸缩性和容错性。 Google集群和并行数据处理系统: * 9.4.2 实现原理 (1)MapReduce原理的要点 一种简化的并行编程模型,借用函数式编程中的map和reduce函数,将复杂的运行于大规模集群上的并行计算过程高度的抽象到了两个阶段:借用了Lisp中相似功能的名称,将这两个阶段分别用Map函数和Reduce函数命名,并将此计算模型命名为MapReduce,然后自动分布到一个由普通机器组成的超大集群上并发执行。 MapReduce原理的要点: 数据分割、任务调度、故障处理等细节对程序员透明; 利用资源无关性的原理,提高处理效率; 合理的任务粒度,优化容错处理和整体效率; 本地计算:充分利用数据的空间局部性来减少网络传输,节省带宽资源; 减少中间数据的产生,优化网络传输。 * (2)产生背景 软件方式基本上是单指令单数据流的顺序执行,这种顺序执行十分符合人类的思考习惯,却与并发并行编程格格不入。 ? 基于集群的分布式并行编程能够让软件与数据同时运行在连成一个网络的许多台计算机上,这里的每一台计算机均可以是一台普通的PC 机。 这样的分布式并行环境的最大优点是可以很容易的通过增加计算机来扩充新的计算结点,并由此获得不可思议的海量计算能力, 同时又具有相当强的容错能力,一批计算结点失效也不会影响计算的正常进行以及结果的正确性。 在这种思路下,Google 使用了名为MapReduce的并行编程模型进行分布式并行编程,运行在GFS ( Google File System )的分布式文件系统上,为全球亿万用户提供搜索服务。 * (3)MapReduce计算模型 适合用MapReduce来处理的数据集(或任务)有一个基本要求: 待处理的数据集可以分解成许多小的数据集,而且每一个小数据集都可以完全并行地进行处理。 MapReduce的计算模型如下: Map: (K1, V1) ?list(K2, V2) Reduce: (K2, list(V2)) ?list(K3, V3) 计算模型的核心是Map 和Reduce 两个函数,这两个函数由用户负责实现,功能是按一定的映射规则将输入的key, value 对转换成另一个或一批key, value 对输出。 (4)MapReduce计算过程 MapReduce的计算过程就是将大数据集分解为成百上千的小数据集,每个(或若干个)数据集分别由集群中的一个结点(一般就是一台普通的计算机)进行处理并生成中间结果,然后这些中间结果又由大量的结点进行合并, 形成最终结果。具体计算过程如下: ? * * 对于程序员: 基于MapReduce计算模型编写分布式并行程序非常简单,程序员的主要编码工作就是实现Map 和Reduce 函数,其它的并行编程中的种种复杂问题,如分布式存储,工作调度,负载平衡,容错处理,网络通信等,均由MapReduce框架(比如Hadoop)负责处理,程序员完全不用操心。 MapReduce:一种简化的并行编
文档评论(0)