第8课-MapReduce-单词统计实验_第1页
第8课-MapReduce-单词统计实验_第2页
第8课-MapReduce-单词统计实验_第3页
第8课-MapReduce-单词统计实验_第4页
第8课-MapReduce-单词统计实验_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MapReduce单词统计实验【实验名称】MapReduce单词统计实验【实验目的】hadoop的Wordcount程序是hadoop自带的一个小小的案例,通过给出要统计的单词及一个单词列表,统计这个单词在列表里出现的次数。【实验要求】1.理解MapReduce编程思想;2.成功编写MapReduce版本的WordCount;3.执行该程序;4.自行分析执行过程。【实验环境】此实验在第2课的基础上进行实验,如没有hadoop集群的环境请先按照第2课的内容部署好hadoop集群环境再进行此课程【实验步骤】1.基础环境准备1.1IP地址规划序号主机名密码11MasterNameNodeJobTracker31112345622SlaveDataNodeTaskTracker3221234563Slave33123453DataNodeTaskTracker362.Wordcount程序2.1检查集群环境是否正常我们通过在每个节点上运行jps命令,查询hadoop集群的服务是否正常运行[[root@hadoop1~]#jpshadoop1:2.2在hadoop1上查看hadoop的jar包2.2.1我们在主节点上迚入hadoop安装目录下的bin目录[[root@hadoop1~]#cd/opt/hadoop-3.1.0/bin/2.2.2测试jar包都有哪些工具[[root@hadoop1bin]#./hadoopjar//opt/hadoop-3.1.0/share/hadoop/mapreduce/hadoop-mapreduce-examplesmples-3.1.0.jar2.2.3从这个截图中可以清晰的看到hadoop-mapreduce-examples-3.1.0.jar文件丌只有一个Wordcount一个小案例,还有其他的小案例,但是现在我们是测试一下我们的hadoop到底是怎么运行的,所以就用一个简单的Wordcount程序就OK了2.2.4查看Wordcount需要提供哪些参数[[root@hadoop1bin]#./hadoopjar//opt/hadoop-3.1.0/share/hadoop/mapreduce/hadoop-mapreduce-examplesmples-3.1.0.jarwordcount根据上面显示。说明要我们输入文件和输出2.3运行单词统计2.3.1我们在HDFS文件系统上创建一个名为input的文件夹,并查看创建好的文件夹[[root@hadoop1bin]#hdfsdfs-mkdir/input[[root@hadoop1bin]#hdfsdfs-ls/2.3.2将/root文件夹下的anaconda-ks.cfg文件复制到HDFS文件系统中的input文件夹中,并查看input中是否有该文件[[root@hadoop1bin]#hdfsdfs-put/root/anaconda-ks.cfg/input[[root@hadoop1bin]#hdfsdfs-ls/input2.3.3统计anaconda-ks.cfg中的单词[[root@hadoop1bin]#./hadoopjar//opt/hadoop-3.1.0/share/hadoop/mapreduce/hadoop-mapreduce-examplesmples-3.1.0.jarwordcount/input//output/2.3.4查看单词统计结果,单词统计的结果已经输出到/output文件夹中[[root@hadoop1bin]#hdfsdfs-cat/output/*3.通过API来调用有JAVA基础的同学可以API来调用,如无JAVA基础实现上面的实验即可3.1创建javamaven项目3.2配置pom.xml文件加载jar包3.3创建单词统计MapReduce类3.4完成map方法3.5完成reduce方法3.6添加MapReduce方法入口3.7把java打包成jar3.7.1选中项目右键,选择Export,选中JARfile,然后next下一步3.7.2选择要打包的项目和地址,然后next下一步3.7.3选择打包的class,选择OK然后Finish4.Hadoop运行打包好的jar文件4.1将打包好的jar上传到linux4.1.1右键linux虚拟机,选择ConnectSFTPSession迚入sftp4.1.2将jar直接拖到sftp上4.1.3然后执行下面命令[[root@hadoop1]#hadoopjarWordCountApp.jar4.1.4注意你在java指定的文件必须在HDFS上,输出的文件则必须为空4.1.5运行成功如下图4.1.6查看输出信息命令[[root@hadoop1]#hdfsdfs-cat/out1/part-00000至此,本实验结束5.java代码和配置文件(附)5.1java类packagehhh;importjava.io.IOException;importjava.util.Iterator;importjava.util.StringTokenizer;importorg.apache.hadoop.fs.Path;importorg.apache.hadoop.io.IntWritable;importorg.apache.hadoop.io.Text;importorg.apache.hadoop.mapred.FileInputFormat;importorg.apache.hadoop.mapred.FileOutputFormat;importorg.apache.hadoop.mapred.JobClient;importorg.apache.hadoop.mapred.JobConf;importorg.apache.hadoop.mapred.MapReduceBase;importorg.apache.hadoop.mapred.Mapper;importorg.apache.hadoop.mapred.OutputCollector;importorg.apache.hadoop.mapred.Reducer;importorg.apache.hadoop.mapred.Reporter;importorg.apache.hadoop.mapred.TextInputFormat;importorg.apache.hadoop.mapred.TextOutputFormat;publicclassWordCountApp{/***Mapper类publicstaticclassWordCountMapperextendsMapReduceBaseimplementsMapper<Object,Text,Text,IntWritable>{privatefinalstaticIntWritableone=newIntWritable(1);privateTextword=newText();/***map方法完成工作就是读取文件*将文件中每个单词作为key键,值设置为1,*然后将此键值对设置为map的输出,即reduce的输入@Overridepublicvoidmap(Objectkey,Textvalue,OutputCollector<Text,IntWritable>output,Reporterreporter)throwsIOException{StringTokenizeritr=newStringTokenizer(value.toString());while(itr.hasMoreTokens()){word.set(itr.nextToken());System.out.println("===========================textstaticwordis:"+word.toString());output.collect(word,one);}}}/***reduce的输入即是map的输出,将相同键的单词的值进行统计*即可得出单词的统计个数,最后把单词作为键,单词的个数作为*输出到设置的输出文件中保存publicstaticclassWordCountReducerextendsMapReduceBaseimplementsReducer<Text,IntWritable,Text,IntWritable>{privateIntWritableresult=newIntWritable();@Overridepublicvoidreduce(Textkey,Iterator<IntWritable>values,OutputCollector<Text,IntWritable>output,Reporterreporter)throwsIOException{while(values.hasNext()){sum+=values.next().get();}result.set(sum);output.collect(key,result);}}publicstaticvoidmain(String[]args)throwsException{//数据输入路径这里的路径需要换成自己的hadoop所在地址Stringinput="hdfs://31:9000/input/wordcount.txt";/***输出路径设置为HDFS的根目录下的out文件夹下*注意:该文件夹丌应该存在,否则出错Stringoutput="hdfs://31:9000/out1";JobConfconf=newJobConf(WordCountApp.class);conf.setJobName("WordCount");//对应单词字符串conf.setOutputKeyClass(Text.class);//对应单词的统计个数int类型conf.setOutputValueClass(IntWritable.class);//设置mapper类conf.setMapperClass(WordCountMapper.class);conf.setCombinerClass(WordCountReducer.class);//设置reduce类conf.setReducerClass(WordCountReducer.class);conf.setInputFormat(TextInputFormat.class);conf.setOutputFormat(TextOutputFormat.class);//设置输入数据文件路径FileInputFormat.setInputPaths(conf,newPath(input));//设置输出数据文件路径(该路径丌能存在,否则异常)FileOutputFormat.setOutputPath(conf,newPath(output));//启劢mapreduceJobClient.runJob(conf);System.exit(0);}}5.2pom.xml配置文件<dependencies><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>2.8.1</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>2.8.1</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>2.8.1</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-mapreduce-client-core</artifactId><version>2.8.1</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-auth</artifactId><version>2.8.1</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version></dependency><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>19.0</version></dependency><dependency><groupId>commons-collections</groupId><artifactId>common

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论