当前位置:   article > 正文

Hadoop实现wordcount单词计数(eclipse架包操作)_hadoop jar的单词统计

hadoop jar的单词统计

Hadoop系统环境:CentOS4

例子:计数文件名为hello

实现流程:

1.eclipse写三个操作类

(1)主函数所在类WCDemo

  1. package cn.cqsw;
  2. import java.io.IOException;
  3. import org.apache.hadoop.conf.Configuration;
  4. import org.apache.hadoop.fs.Path;
  5. import org.apache.hadoop.io.LongWritable;
  6. import org.apache.hadoop.io.Text;
  7. import org.apache.hadoop.mapreduce.Job;
  8. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
  9. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
  10. public class WCDemo {
  11. public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
  12. Configuration conf = new Configuration();
  13. Job job = Job.getInstance(conf);
  14. job.setJarByClass(WCDemo.class);
  15. // 指定mapper类和reducer类
  16. job.setMapperClass(WCMap.class);
  17. job.setReducerClass(WCReduce.class);
  18. // 指定maptask的输出类型
  19. job.setMapOutputKeyClass(Text.class);
  20. job.setMapOutputValueClass(LongWritable.class);
  21. // 指定reducetask的输出类型
  22. job.setOutputKeyClass(Text.class);
  23. job.setOutputValueClass(LongWritable.class);
  24. // 指定该mapreduce程序数据的输入和输出路径
  25. Path inputPath = new Path("/hello");
  26. Path outputPath = new Path("/out3");
  27. FileInputFormat.setInputPaths(job, inputPath);
  28. FileOutputFormat.setOutputPath(job, outputPath);
  29. boolean waitForCompletion = job.waitForCompletion(true);
  30. System.exit(waitForCompletion?0:1);
  31. }
  32. }

这里有两个需要注意的点:

1、代码中:// 指定该mapreduce程序数据的输入和输出路径
        Path inputPath = new Path("/hello");
        Path outputPath = new Path("/out3");

 /hello指的是需要计数单词的文件的路径   /out3指的是输出计数情况的文件的路径

这里的路径是因为博主将这个架包和hello文件放在同一目录下!!(看后面的截图)

而且,最好提前设定好需要计数的文件,以免找不到文件!

2、博主包名为cn.cqsw,之后的代码里面需要用到自己的包名!!

(2)类WCMap

  1. package cn.cqsw;
  2. import java.io.IOException;
  3. import org.apache.hadoop.io.LongWritable;
  4. import org.apache.hadoop.io.Text;
  5. import org.apache.hadoop.mapreduce.Mapper;
  6. /**
  7. *
  8. * KEYIN 即k1 表示行的偏移量
  9. * VALUEIN 即v1 表示行文本内容
  10. * KEYOUT 即k2 表示行中出现的单词
  11. * VALUEOUT 即v2 表示行中出现的单词的次数,固定值1
  12. *
  13. */
  14. public class WCMap extends Mapper<LongWritable, Text, Text, LongWritable> {
  15. @Override
  16. protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text,LongWritable>.Context context)
  17. throws IOException, InterruptedException {
  18. //按空格来分割
  19. String[] splited=value.toString().split(" ");
  20. for(String str :splited)
  21. {
  22. //按KV的形式输出数据
  23. context.write(new Text(str),new LongWritable(1));
  24. }
  25. }
  26. }

(3)类WCReduce

  1. package cn.cqsw;
  2. import java.io.IOException;
  3. import org.apache.hadoop.io.LongWritable;
  4. import org.apache.hadoop.io.Text;
  5. import org.apache.hadoop.mapreduce.Reducer;
  6. /**
  7. *
  8. * KEYIN 即k2 表示行中出现的单词
  9. * VALUEIN 即v2 表示出现的单词的次数
  10. * KEYOUT 即k3 表示行中出现的不同单词
  11. * VALUEOUT 即v3 表示行中出现不同单词的总次数
  12. *
  13. */
  14. public class WCReduce extends Reducer<Text, LongWritable,Text, LongWritable> {
  15. @Override
  16. protected void reduce(Text text, Iterable<LongWritable> iterable,Reducer<Text, LongWritable,Text,LongWritable>.Context context) throws IOException,InterruptedException {
  17. long time=0;
  18. for(LongWritable lw :iterable)
  19. {
  20. time+=lw.get();
  21. }
  22. context.write(text, new LongWritable(time));
  23. }
  24. }

2. 打成架包并传到Hadoop所在系统上去(博主的架包名为11_28.jar)

3.复制需要计数的文件到HDFS系统上

这两步骤在博主之前的文章中有详细的步骤,在这就不重复说明了,不懂的小伙伴可以看一下下面这篇文章~

复制本地文件到HDFS系统(eclipse操作 )_资深咸鱼~的博客-CSDN博客

4. 单词计数实现

(1)这里说明一下博主的架包11_28.jar和计数文件hello,在同一目录/opt下

(2) 在Xshell的会话中输入命令

hadoop jar 11_28.jar cn.cqsw.WCDemo

再次提醒: 红色的为架包名,蓝色的为包名,紫色的为主函数所在的类名!!

(3)查看计数情况

hadoop fs -cat /out3/part-r-00000

注意:/out3指的是输出计数情况的文件的路径, 最好设置为以前没有设定为输出计数情况的文件名,避免报错!!!报错问题和情况和解决方法博主之前也写过的!!

如果不记得了,看下面这个文章!!这个文章也提到了Hadoop另一种计数方法,有兴趣的小伙伴也可以学习!!

Hadoop实现单词计数_资深咸鱼~的博客-CSDN博客_用hadoop进行单词计数

 

(5)在50070端口查看

这里也可以下载这个文件查看计数情况

 

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

闽ICP备14008679号