当前位置:   article > 正文

利用MapReduce算法实现统计分析(单词统计,或者关键词统计)实验报告_mapreduce单词计数实验总结

mapreduce单词计数实验总结

本文相关idea的代码出自:https://blog.csdn.net/weixin_38468167/article/details/108658531

实验内容:开发MapReduce算法,实现统计分析

具体操作流程:

第一步:给windows准备好JDK环境并配置系统环境变量,系统环境变量需要设置三个地方:CLASSPATH,JAVA_HOMEjdk路径PATH如图.

  

第二步,安装IDEA2019.3.3版本,并破解(这里只需将IDEA打开,并且把idea破解包(自行下载)拖至IDEA界面即可) 

安装过程过于简单就不详细介绍了

第三步,给IDEA创建新项目,选择JDK版本(注意jdk版本必须与本机一致否则后面写代码会出错),如图:

第四步,编写函数

(1)MyMainClass(main函数,驱动函数)

  1. import org.apache.hadoop.conf.Configuration;
  2. import org.apache.hadoop.fs.Path;
  3. import org.apache.hadoop.io.IntWritable;
  4. import org.apache.hadoop.io.Text;
  5. import org.apache.hadoop.mapreduce.Job;
  6. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
  7. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
  8. import java.io.IOException;
  9. public class MyMainClass {
  10. public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
  11. Configuration conf = new Configuration();
  12. Job wordCountJob = Job.getInstance(conf);
  13. //指定本job所在的jar包
  14. wordCountJob.setJarByClass(MyMainClass.class);
  15. //设置wordCountJob所用的mapper逻辑类为哪个类
  16. wordCountJob.setMapperClass(MyMapClass.class);
  17. //设置wordCountJob所用的reducer逻辑类为哪个类
  18. wordCountJob.setReducerClass(MyReduceClass.class);
  19. //设置map阶段输出的kv数据类型
  20. wordCountJob.setMapOutputKeyClass(Text.class);
  21. wordCountJob.setMapOutputValueClass(IntWritable.class);
  22. //设置最终输出的kv数据类型
  23. wordCountJob.setOutputKeyClass(Text.class);
  24. wordCountJob.setOutputValueClass(IntWritable.class);
  25. //设置要处理的文本数据所存放的路径
  26. FileInputFormat.setInputPaths(wordCountJob, "hdfs://192.168.1.24:9000/mapreduce/input/mydata1");
  27. FileOutputFormat.setOutputPath(wordCountJob, new Path("hdfs://192.168.1.24:9000/mapreduce/output/"));
  28. //提交job给hadoop集群
  29. wordCountJob.waitForCompletion(true);
  30. }
  31. }

注意文件输入(FileInputFormat)那里,必须和自己在hdfs下mapreduce里所创建的文件路径一致,输出同理。

创建输入文件命令:

Hdfs dfs -mkdir -p /mapreduce/input(-p表示逐级创建)

创建输出文件命令:

Hdfs dfs -mkdir -p /mapreduce/output

(2)MyMapClass(分割,map节点)

  1. import org.apache.hadoop.io.*;
  2. import org.apache.hadoop.mapreduce.Mapper;
  3. import java.io.IOException;
  4. public class MyMapClass extends Mapper<LongWritable,Text,Text,IntWritable> {
  5. @Override
  6. protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
  7. String line=value.toString();
  8. String[] words=line.split(",");
  9. for (String word:words){
  10. context.write(new Text(word),new IntWritable(1));
  11. }
  12. }
  13. }

 (3)MyReduceClass(reduce节点)

  1. import org.apache.hadoop.io.IntWritable;
  2. import org.apache.hadoop.io.LongWritable;
  3. import org.apache.hadoop.io.Text;
  4. import org.apache.hadoop.mapreduce.Reducer;
  5. import java.io.IOException;
  6. public class MyReduceClass extends Reducer <Text, IntWritable,Text, IntWritable>{
  7. @Override
  8. protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
  9. int total=0;
  10. //遍历value,求和
  11. for (IntWritable value:values){
  12. total+=value.get();
  13. }
  14. context.write(key,new IntWritable(total));
  15. }
  16. }

(4)MyPartitionerClass(分页)

  1. import org.apache.hadoop.io.IntWritable;
  2. import org.apache.hadoop.mapreduce.Partitioner;
  3. import org.w3c.dom.Text;
  4. public class MyPartitioner extends Partitioner <Text, IntWritable> {
  5. @Override
  6. public int getPartition(Text text, IntWritable intWritable, int i) {
  7. return Math.abs(text.hashCode())%i;
  8. }
  9. }

 第五步,新建一份需要统计的文本命名为mydata1,命名随意,里面的内容也随意,示例如图:

上传到input文件:命令 hdfs dfs -put mydata1 /mapreduce/input(只能云端查看文件)

第六步,把函数打包成jar包(IDEA上的简单操作,如下图)

 以上步骤完成就会在本地文件生成jar包,如下图:

第七步,将生成的jar包上传到hadoop(这里我用PowerShell远程传输到hadoop),命令:scp java.hadoop.jar Flume@192.168.1.24:/home/Flume(Flume为自己的用户,“:”后面是自己上传的虚拟机的路径)

第八步,启动生成的jar包程序

这里遇到一些问题,就是直接启动会报错,后来通过查询知道jar包上传时自动生成了一些文件,必须删掉,命令:zip -d java.hadoop.jar META-INF/*.RSA META-INF/*.DSA META-INF/*.SF如下图:

然后启动jar包:

输出结果:命令:hdfs dfs -cat /mapreduce/output

端口查看:

到这里就结束啦~! 

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

闽ICP备14008679号