- 1、本文档共47页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * Rackspace(NYSE:RAX)全球三大云计算中心之一,成立于1998年,是一家全球领先的托管服务提供商,在全球拥有10个以上数据中心,管理超过64000台服务器。 * * * * * * * * * * * * * * (1)在用户程序中的MapReduce类库先将输入文件分割成大小在16-64Mb(由用 户参数控制)之间的块,然后将程序复制到集群中参与整个MapReduce过程的机器上。 (2)其中任务节点是一个很特殊的节点,其余的工作节点的任务都是由任务节点 分配的。任务节点分配好了M个Map任务和R个Reduce任务之后,将这些任务分配 给那些闲置的工作节点。(其实在此过程中,任务节点会多分配一个冗余任务给另一个 工作节点,无论哪一个任务先完成,都代表此任务已经完成,这样就避免了整个程序受 制于某一任务节点一直没有完成任务所带来的延时) (3)获得Map任务的工作节点负责从输入分块中读取内容,并且生成一个key, value的中间结果,并缓存于本地内存。 (4)同时,程序将内存中的数据写入本地磁盘中,并且将其分为R个区域,并将 此区域信息告知任务节点,以便完成后续工作。 (5)当大部分的Map工作完成后,任务节点通知所有的Reduce节点开始从Map节点的本地磁盘中远程读取中间数据,并将具有相同key值的数据做一个归并操作。 (6)Reduce节点反复的归并中间数据,并且不断的向输出文件中添加结果,最终 生成一个最后的输出结果。 (7)当所有任务完成时,任务节点叫醒用户程序,并将R份Reduce结果返回给用 户程序,用户程序再将这些结果合并得到最终结果。 * * * 创建maven工程并加入hadoop依赖我们选用maven来管理工程,用自己喜爱的m2eclipse插件在eclipse里创建或在命令行里创建一个工程。在pom.xml里加入hadoop依赖。 dependency groupIdorg.apache.hadoop/groupId artifactIdhadoop-core/artifactId version0.20.2/version /dependency repositories repository idcloudera/id url/content/groups/public/url /repository /repositories 概述一个简单的MapReduce程序需要三样东西1.实现Mapper,处理输入的对,输出中间结果2.实现Reduce,对中间结果进行运算,输出最终结果3.在main方法里定义运行作业,定义一个job,在这里控制job如何运行等。 Mapper接口是一个泛型,有4个形式的参数类型,分别指定map函数的输入键,输入值,输出键,输出值。就上面的示例来说,输入键没有用到(实际代表行在文本中格的位置,没有这方面的需要,所以忽略),输入值是一样文本,输出键为单词,输出值为整数代表单词出现的次数。需要注意的是Hadoop规定了自己的一套可用于网络序列优化的基本类型,而不是使用内置的java类型,这些都在org.apache.hadoop.io包中定义,上面使用的Text类型相当于java的String类型,IntWritable类型相当于java的Integer类型。除此之外,看不到任何分布式编程的细节,一切都是那么的简单。 同样,Reducer接口的四个形式参数类型指定了reduce函数的输入和输出类型。在上面的例子中,输入键是单词,输入值是单词出现的次数,将单词出现的次数进行叠加,输出单词和单词总数。 * 基本上完成一个MapReduce程序就这么简单,复杂的在于job的配置有着复杂的属性参数,如文件分割策略、排序策略、map输出内存缓冲区的大小、工作线程数量等,深入理解掌握这些参数才能使自己的MapReduce程序在集群环境中运行的最优。 小结 本文通过一个实例说明了MapReduce的基本编程模型,希望通过此能加深对MapReduce的理解,在后面的文章中将介绍如何测试MapReduce及如何把作业运行起来。 * * * * * * * * * * * 云计算关键技术 MapReduce编程模型 每一个Map函数就是对一部分原始数据进行指定的操作。每个Map操作都针对不同的原始数据,因此Map与Map之间时相互独立的,可以并行化。 一个Reduce操作就是对每个Map所产生的一部分中间结果进行合并操作,每个Reduce所处理的Map中间结果互不交叉,所有Reduce产生的最终结果经过简单的连接就形成了完整的结果集,所以Reduce也可以并行化。 主要函数: Map: (in_key,in_value)-{(keyi, val
文档评论(0)