当前位置:   article > 正文

调用MapReduce对文件中各个单词出现的次数进行统计_eclipse用mapreduce实现计数

eclipse用mapreduce实现计数

调用MapReduce对文件中各个单词出现的次数进行统计:

环境:Hadoop | 软件:Eclipse


实验要求:

1.将待分析的文件(不少于10000个英文单词)上传到HDFS

2.将MapReduce对文件中各个单词出现的次数进行统计。

3.将统计结果下载本地。


操作步骤:

调用MapReduce对文件中的各个单词出现的次数进行统计

步骤简述:

1.首先在eclipse中创建项目。

2.然后将需要用到的jar包导入到eclipse中的项目中。

3.编写名称为HDFSFileExist项目,并运行。

4.编写名称为WordCount的项目,并运行。

5.开启hadoop。

6.删除hadoop中的input和output文件

7.重新建立input文件,将需要用到的文件移动到该目录下

8.然后执行命令查看词频统计。

9.打印词频统计结果。


现在,开始介绍详细步骤

1.首先打开Eclipse,先填写workspace,该目录是保存文件的目录,这里建议默认不要更改,点击OK进入下一步,如下图所示:

 2、进入Eclipse后,开始创建一个Java工程,点击“File->New->Project->Java Project->Next”,如下图所示:

 3.1)进行下一步设置,将需要用到的jar包导入到项目中,如下图所示:

 2)进行下一步设置,在Libraries中点击"Add External JARS……",进行包的添加,如下图所示:

3)添加包完毕后,在点击下方的"Finish"按钮,就可以完成HDFSExample工程的创建,如下图所示:

 

 4.接着在新建好的项目中右键点击,选择"New->Class",进行"HDFSFileExist"源文件的创建,如下图所示:

 5.在新建的文件中将图中的代码输入,如下图:

 以下附上图中的代码:

  1. import org.apache.hadoop.conf.Configuration;
  2. import org.apache.hadoop.fs.FileSystem;
  3. import org.apache.hadoop.fs.Path;
  4. public class HDFSFileIfExist {
  5. public static void main(String[] args){
  6. try{
  7. String fileName = "test";
  8. Configuration conf = new Configuration();
  9. conf.set("fs.defaultFS", "hdfs://localhost:9000");
  10. conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
  11. FileSystem fs = FileSystem.get(conf);
  12. if(fs.exists(new Path(fileName))){
  13. System.out.println("文件存在");
  14. }else{
  15. System.out.println("文件不存在");
  16. }
  17. }catch (Exception e){
  18. e.printStackTrace();
  19. }
  20. }
  21. }

 6.将hadoop启动,在Eclipse中上方点击”Run As->Java Application“运行文件,如下图所示:

 7.点击后,会弹出以下界面,点击”OK“即可,如下图所示:

8.点击”OK“ 后,会弹出以下警告信息,以及一个”文件不存在的提示“,可以不必理会,继续往下做,如下图:

 9.新建一个myapp的文件夹用来存放hadoop中的文件,命令如下:

  1. cd /usr/local/hadoop
  2. mkdir myapp

 10.在工程名称为”HDFSExample“上单击鼠标右键,在弹出来的方框中选中”Export“,如下图所示:

11.点击”Export“后,弹出以下方框,点击”Runnable JAR file“,再点击”Next“进行下一步,如下图:

 

 12.之后会弹出如下图,直接点击”Finish“即可,如下图:

13.通过Eclipse运行MapReduce 

1)以下是MapReduce安装步骤截图,详细步骤请点击该链接http://dblab.xmu.edu.cn/blog/hadoop-build-project-using-eclipse/

 

 

14.新建一个WordCount工程,按照上面导入jar包一样导入jar包 ,创建工程的图如下所示:

 15.将代码运行后,如下图所示:

 图中的代码如下所示:

  1. package org.apache.hadoop.examples;
  2. import java.io.IOException;
  3. import java.util.Iterator;
  4. import java.util.StringTokenizer;
  5. import org.apache.hadoop.conf.Configuration;
  6. import org.apache.hadoop.fs.Path;
  7. import org.apache.hadoop.io.IntWritable;
  8. import org.apache.hadoop.io.Text;
  9. import org.apache.hadoop.mapreduce.Job;
  10. import org.apache.hadoop.mapreduce.Mapper;
  11. import org.apache.hadoop.mapreduce.Reducer;
  12. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
  13. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
  14. import org.apache.hadoop.util.GenericOptionsParser;
  15. public class WordCount {
  16. public WordCount() {
  17. }
  18. public static void main(String[] args) throws Exception {
  19. Configuration conf = new Configuration();
  20. String[] otherArgs = (new GenericOptionsParser(conf, args)).getRemainingArgs();
  21. if(otherArgs.length < 2) {
  22. System.err.println("Usage: wordcount <in> [<in>...] <out>");
  23. System.exit(2);
  24. }
  25. Job job = Job.getInstance(conf, "word count");
  26. job.setJarByClass(WordCount.class);
  27. job.setMapperClass(WordCount.TokenizerMapper.class);
  28. job.setCombinerClass(WordCount.IntSumReducer.class);
  29. job.setReducerClass(WordCount.IntSumReducer.class);
  30. job.setOutputKeyClass(Text.class);
  31. job.setOutputValueClass(IntWritable.class);
  32. for(int i = 0; i < otherArgs.length - 1; ++i) {
  33. FileInputFormat.addInputPath(job, new Path(otherArgs[i]));
  34. }
  35. FileOutputFormat.setOutputPath(job, new Path(otherArgs[otherArgs.length - 1]));
  36. System.exit(job.waitForCompletion(true)?0:1);
  37. }
  38. public static class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
  39. private IntWritable result = new IntWritable();
  40. public IntSumReducer() {
  41. }
  42. public void reduce(Text key, Iterable<IntWritable> values, Reducer<Text, IntWritable, Text, IntWritable>.Context context) throws IOException, InterruptedException {
  43. int sum = 0;
  44. IntWritable val;
  45. for(Iterator i$ = values.iterator(); i$.hasNext(); sum += val.get()) {
  46. val = (IntWritable)i$.next();
  47. }
  48. this.result.set(sum);
  49. context.write(key, this.result);
  50. }
  51. }
  52. public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> {
  53. private static final IntWritable one = new IntWritable(1);
  54. private Text word = new Text();
  55. public TokenizerMapper() {
  56. }
  57. public void map(Object key, Text value, Mapper<Object, Text, Text, IntWritable>.Context context) throws IOException, InterruptedException {
  58. StringTokenizer itr = new StringTokenizer(value.toString());
  59. while(itr.hasMoreTokens()) {
  60. this.word.set(itr.nextToken());
  61. context.write(this.word, one);
  62. }
  63. }
  64. }
  65. }

16.运行完成后,在左边的方框中会出现input和output两个文件(如果需要重新运行该程序,则需要将output删除),如下图所示:

 17.将WordCount导出到myapp目录中,如下图所示:

 18.配置好以上文件后,就可以打开命令行终端,在网上找好10000字的英文论文放到/usr/local/hadoop目录下,为后面做好准备。

19.使用ls命令查看myapp目录下的文件,如下图:

 20.随后返会到hadoop目录下,将input和output目录删除,如下图:

 21.之后再使用./bin/hdfs dfs -put wordfile.txt input将文件放到input目录下。

22.然后用./bin/hdfs dfs -cat output/*将词频统计输出,如下图:

 23.最后使用图中命令将结果打印出来,如下图:

 

 


在这里,MapReduce的实验到此就结束了,感谢观看!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/337564
推荐阅读
相关标签
  

闽ICP备14008679号