MapReduce经典例子WordCount运行详解.doc
《MapReduce经典例子WordCount运行详解.doc》由会员分享,可在线阅读,更多相关《MapReduce经典例子WordCount运行详解.doc(16页珍藏版)》请在课桌文档上搜索。
1、wordHadoop MapReduce经典例子WordCount 运行详解1、MapReduce理论简介1.1 MapReduce编程模型 MapReduce 采用“分而治之的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分节点共同完成,然后通过整合各个节点的中间结果,得到最终结果。简单地说,MapReduce 就是“任务的分解与结果的汇总。在Hadoop 中,用于执行MapReduce 任务的机器角色有两个:一个是JobTracker;另一个是TaskTracker,JobTracker 是用于调度工作的,TaskTracker 是用于执行工作的。一个Hadoop集群中只有一台
2、JobTracker。在分布式计算中,MapReduce 框架负责处理了并行编程中分布式存储、工作调度、负载均衡、容错均衡、容错处理以与网络通信等复杂问题,把处理过程高度抽象为两个函数:map 和reduce,map 负责把任务分解成多个任务,reduce 负责把分解后多任务处理的结果汇总起来。需要注意的是,用MapReduce 来处理的数据集或任务必须具备这样的特点:待处理的数据集可以分解成许多小的数据集,而且每一个小数据集都可以完全并行地进展处理。1.2 MapReduce处理过程在Hadoop 中,每个MapReduce 任务都被初始化为一个Job,每个 Job 又可以分为两种阶段:ma
3、p 阶段和reduce 阶段。这两个阶段分别用两个函数表示,即map 函数和reduce 函数。map 函数接收一个形式的输入,然后同样产生一个形式的中间输出,Hadoop 函数接收一个如形式的输入,然后对这个 value 集合进展处理,每个reduce 产生0 或1 个输出,reduce 的输出也是形式的。MapReduce 处理大数据集的过程116 / 16创建时间:2012/3/1修改时间:2017/3/1 修改次数:02、运行WordCount程序单词计数是最简单也是最能表现MapReduce 思想的程序之一,可以称为MapReduce 版“Hello World,该程序的完整代码可以
4、在Hadoop 安装包的“src/examples目录下找到。单词计数主要完成功能是:统计一系列文本文件中每个单词出现的次数,如如下图所示。2.1 准备工作现在以“hadoop普通用户登录服务器。1创建本地示例文件首先在“/home/hadoop目录下创建文件夹“file。接着创建两个文本文件file1.txt 和, file1.txt 内容为使“Hello World 而,的内容为“Hello Hadoop。2创建时间2012/3/1修改时间:2017/3/1 修改次数:02在 HDFS 上创建输入文件夹3上传本地 file 中文件到集群的input 目录下2.2 运行例子1在集群上运行 W
5、ordCount 程序备注:以input 作为输入目录,output 目录作为输出目录。已经编译好的WordCount 的Jar 在“/usr/hadoop下面, 就是,所以在下面执行命令时记得把路径写全了,不然会提示找不到该Jar 包。2MapReduce 执行过程显示信息Hadoop 命令会启动一个JVM 来运行这个MapReduce 程序,并自动获得Hadoop 的配置,同时把类的路径与其依赖关系参加到Hadoop 的库中。以上就是Hadoop Job 的运行记录,从这里可以看到,这个Job 被赋予了一个ID 号:job_201202292213_0002,而且得知输入文件有两个Tota
6、l input paths to process : 2,同时还可以了解map 的输入输出记录record 数与字节数,以与reduce 输入输出记录。比如说,在本例中,map 的task 数量是2 个,reduce3创建时间:2012/3/1修改时间:2012/3/1 修改次数:0的task 数量是一个。map 的输入record 数是2 个,输出record 数是4 个等信息。2.3 查看结果1查看 HDFS 上output 目录内容从上图中知道生成了三个文件,我们的结果在“part-r-00000中。2查看结果输出文件内容3、WordCount源码分析3.1 特别数据类型介绍Hadoop
7、 提供了如下内容的数据类型,这些数据类型都实现了Writableparable 接口,以便用这些类型定义的数据可以被序列化进展网络传输和文件存储,以与进展大小比拟。BooleanWritable:标准布尔型数值ByteWritable:单字节数值DoubleWritable:双字节数FloatWritable:浮点数IntWritable:整型数LongWritable:长整型数Text:使用 UTF8 格式存储的文本NullWritable:当中的 key 或value 为空时使用3.2 旧的WordCount分析1源代码程序package org.apache.hadoop.example
8、s;4创建时间:2012/3/1修改时间:2012/3/1 修改次数:0import java.io.IOException;import java.util.Iterator;import java.util.StringTokenizer;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapred
9、.FileInputFormat;import org.apache.hadoop.mapred.FileOutputFormat;import org.apache.hadoop.mapred.JobClient;import org.apache.hadoop.mapred.JobConf;import org.apache.hadoop.mapred.MapReduceBase;import org.apache.hadoop.mapred.Mapper;import org.apache.hadoop.mapred.OutputCollector;import org.apache.h
10、adoop.mapred.Reducer;import org.apache.hadoop.mapred.Reporter;import org.apache.hadoop.mapred.TextInputFormat;import org.apache.hadoop.mapred.TextOutputFormat;publicclassWordCountpublicprivateprivatestatic class Map extends MapReduceBaseMapper finalstatic IntWritable one = newText word = new Text();
11、implementsIntWritable( 1 );publicvoid map(LongWritable key, Text value,OutputCollector output, Reporter reporter)throws IOExceptionString line = value.toString();StringTokenizer tokenizer = new StringTokenizer(line);while (tokenizer.hasMoreTokens() word.set(tokenizer.nextToken(); output.collect(word
12、, one);5创建时间:2012/3/1修改时间:2012/3/1 修改次数:0publicstatic class Reduce extends MapReduceBaseReducerimplementspublicvoid reduce(Text key, Iterator values,OutputCollector output, Reporter reporter)throws IOExceptionint sum = 0 ;while (values.hasNext() sum += values.next().get();output.collect(key, new Int
13、Writable(sum);public static void main(String args) throws Exception JobConf conf = new JobConf(WordCount. class ); conf.setJobName(wordcount );conf.setOutputKeyClass(Text.class );conf.setOutputValueClass(IntWritable.class );conf.setMapperClass(Map.class );conf.setbinerClass(Reduce.class );conf.setRe
14、ducerClass(Reduce.class );conf.setInputFormat(TextInputFormat.class );conf.setOutputFormat(TextOutputFormat.class );FileInputFormat.setInputPaths(conf, new Path(args 0 );FileOutputFormat.setOutputPath(conf, new Path(args 1 );JobClient.runJob(conf);3主方法Main 分析public staticvoidmain(String args) throws
15、 ExceptionJobConf conf = new JobConf(WordCount. class );conf.setJobName(wordcount );6创建时间:2012/3/1修改时间:2012/3/1 修改次数:0conf.setOutputKeyClass(Text.class );conf.setOutputValueClass(IntWritable.class );conf.setMapperClass(Map.class );conf.setbinerClass(Reduce.class );conf.setReducerClass(Reduce.class )
16、;conf.setInputFormat(TextInputFormat.class );conf.setOutputFormat(TextOutputFormat.class );FileInputFormat.setInputPaths(conf, new Path(args 0 );FileOutputFormat.setOutputPath(conf, new Path(args 1 );JobClient.runJob(conf);首先讲解一下Job 的初始化过程。main 函数调用Jobconf 类来对MapReduce Job 进展初始化,然后调用setJobName()方法命名
17、这个 Job。对Job 进展合理的命名有助于更快地找到Job,以便在 JobTracker 和Tasktracker 的页面中对其进展监视。JobConf conf = new JobConf(WordCount. class );conf.setJobName(wordcount );接着设置Job 输出结果的中key 和value 数据类型,因为结果是,所以key 设置为“Text类型,相当于Java 中String 类型。Value 设置为“IntWritable,相当于Java 中的int 类型。conf.setOutputKeyClass(Text.class );conf.setO
18、utputValueClass(IntWritable.class );然后设置Job 处理的Map拆分、biner中间结果合并以与Reduce合并的相关处理类。这里用Reduce 类来进展Map 产生的中间结果合并,防止给网络数据传输产生压力。conf.setMapperClass(Map.class );conf.setbinerClass(Reduce.class );conf.setReducerClass(Reduce.class );接着就是调用setInputPath()和 setOutputPath()设置输入输出路径。conf.setInputFormat(TextInput
19、Format.class );conf.setOutputFormat(TextOutputFormat.class );7创建时间:2012/3/1修改时间:2012/3/1 修改次数:01InputFormat 和InputSplitInputSplit 是Hadoop 定义的用来传送给每个单独的map 的数据,InputSplit 存储的并非数据本身,而是一个分片长度和一个记录数据位置的数组。生成InputSplit 的方法可以通过InputFormat()来设置。当数据传送给map 时,map 会将输入分片传送到InputFormat,InputFormat 如此调用方法getReco
20、rdReader()生成 RecordReader,RecordReader 再通过creatKey()、creatValue()方法创建可供map 处理的对。简而言之,InputFormat()方法是用来生成可供 map处理的对的。Hadoop 预定义了多种方法将不同类型的输入数据转化为map 能够处理的对,它们都继承自InputFormat,分别是:InputFormat | |-posableInputFormat |-positeInputFormat |-DBInputFormat |-FileInputFormat |-bineFileInputFormat |-KeyValueT
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MapReduce 经典 例子 WordCount 运行 详解
链接地址:https://www.desk33.com/p-6403.html