预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共17页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

参考: 1caibinbupt的源代码分析 2coderplay的avaeye .com/blog/295097 3Javen-Studio咖啡小屋 一MapReduce概述 Map/Reduce是一个用于大规模数据处理的分布式计算模型,它最初是由Google工程师设计并实现的,Google已经将它完整的MapReduce论文公开发布了。其中对它的定义是,Map/Reduce是一个编程模型(programmingmodel),是一个用于处理和生成大规模数据集(processingandgeneratinglargedatasets)的相关的实现。用户定义一个map函数来处理一个key/value对以生成一批中间的key/value对,再定义一个reduce函数将所有这些中间的有着相同key的values合并起来。很多现实世界中的任务都可用这个模型来表达。 二MapReduce工作原理 Map-Reduce框架的运作完全基于<key,value>对,即数据的输入是一批<key,value>对,生成的结果也是一批<key,value>对,只是有时候它们的类型不一样而已。Key和value的类由于需要支持被序列化(serialize)操作,所以它们必须要实现Writable接口,而且key的类还必须实现WritableComparable接口,使得可以让框架对数据集的执行排序操作。 一个Map-Reduce任务的执行过程以及数据输入输出的类型如下所示: Map:<k1,v1>->list<k2,v2> Reduce:<k2,list<v2>>-><k3,v3> 下面通过一个的例子来详细说明这个过程。 WordCount是Hadoop自带的一个例子,目标是统计文本文件中单词的个数。假设有如下的两个文本文件来运行WorkCount程序: HelloWorldByeWorld HelloHadoopGoodByeHadoop 1map数据输入 Hadoop针对文本文件缺省使用LineRecordReader类来实现读取,一行一个key/value对,key取偏移量,value为行内容。 如下是map1的输入数据: Key1 Value1 0 HelloWorldByeWorld 如下是map2的输入数据: Key1 Value1 0 HelloHadoopGoodByeHadoop 2map输出/combine输入 如下是map1的输出结果 Key2 Value2 Hello 1 World 1 Bye 1 World 1 如下是map2的输出结果 Key2 Value2 Hello 1 Hadoop 1 GoodBye 1 Hadoop 1 3combine输出 Combiner类实现将相同key的值合并起来,它也是一个Reducer的实现。 如下是combine1的输出 Key2 Value2 Hello 1 World 2 Bye 1 如下是combine2的输出 Key2 Value2 Hello 1 Hadoop 2 GoodBye 1 4reduce输出 Reducer类实现将相同key的值合并起来。 如下是reduce的输出 Key2 Value2 Hello 2 World 2 Bye 1 Hadoop 2 GoodBye 1 三MapReduce框架结构 1角色 1.1JobTracker JobTracker是一个master服务,JobTracker负责调度job的每一个子任务task运行于TaskTracker上,并监控它们,如果发现有失败的task就重新运行它。一般情况应该把JobTracker部署在单独的机器上。 1.2TaskTracker TaskTracker是运行于多个节点上的slaver服务。TaskTracker则负责直接执行每一个task。TaskTracker都需要运行在HDFS的DataNode上, 1.3JobClient 每一个job都会在用户端通过JobClient类将应用程序以及配置参数打包成jar文件存储在HDFS,并把路径提交到JobTracker,然后由JobTracker创建每一个Task(即MapTask和ReduceTask)并将它们分发到各个TaskTracker服务中去执行。 2数据结构 2.1Mapper和Reducer 运行于Hadoop的MapReduce应用程序最基本的组成部分包括一个Mapper和一个Reducer类,以及一个创建JobConf的执行程序,在一些应用中还可以包括一个Combiner类,它实际也是Reducer的实现。 2.2JobInProgress JobClient提交job后,JobTracker会创建一个JobInProgress来