当前位置:   article > 正文

MapReduce单词计数(java)_eclipse用mapreduce实现计数

eclipse用mapreduce实现计数

在eclipse进行MapReduce单词计数。

目录

前言

一、登陆开启

二、启动eclipse,编写MapReduce程序

1.创建java工程后,导入库

2.在Hadoop01查看运行MapReducer_jar包

总结


前言

需要配置好jdk环境,准备好eclipse,虚拟机,hadooop集群,Xshell,xtfp传输软件

(不同的版本的jdk,hadoop,eclipse环境不同,可能对实验结果有影响,之前用的jdk11.0.13就不能正常运行)


一、登录开启

1.登陆集群,虚拟机已提前挂好

 2.启动hdfs,yarn组件,并用jps命令条查看所有节点,是否已经开启

启动hdfs,yarn命令条为:

  1. start-dfs.sh
  2. start-yarn.sh

3.使用jps查看hdfs组件

hadoop01节点组件:

 hadoop02和Hadoop03节点组件:

4.上传文件到hdfs,上传前需验证是否有上传的文件

  1. 使用以下命令条查看
  2. Hadoop fs -ls /
  3. 上传命令条
  4. hadoop fs -put /<路径,名称>/
  5. 查看命令条
  6. Hadoop fs -cat /<名称>

二、启动eclipse,编写MapReduce程序

1.创建java工程后,导入库

 

 

 分三次导入库

 

 

导入成功 

2.新建Mapper类

代码如下(示例):

  1. package hadoop.mapreduce.word;
  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. public class wordMapper extends Mapper<LongWritable,Text,Text,LongWritable>
  7. {    
  8.     @Override
  9.     protected void map(LongWritable key,Text value,Mapper<LongWritable,Text,Text,LongWritable>.Context context)
  10.         throws IOException,InterruptedException
  11.         {
  12.             String line=value.toString();        //读取一行数据,转换为字符串,获取单词数组
  13.             String[] words=line.split("");        //以空格,切分字符串
  14.             for(String word:words)                //记录单词频率
  15.             {
  16.                 context.write(new Text(word),new LongWritable(1));        //输出
  17.             }
  18.         }
  19. }
3.新建Reducer类
  1. package hadoop.mapreduce.word;
  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. public class wordReducer extends Reducer<Text,LongWritable,Text,LongWritable>
  7. {
  8.     @Override
  9.     protected void reduce(Text key,Iterable<LongWritable> value,Context context)
  10.         throws IOException,InterruptedException
  11.         {
  12.             int count=0;                        //初始化变量
  13.             for(LongWritable values:value)        //定长格式,汇总单词个数
  14.             {
  15.                 count=(int)(count+values.get());
  16.             }
  17.             context.write(key,new LongWritable(count));        //输出
  18.         }
  19. }
4.新建驱动类
  1. package hadoop.mapreduce.word;
  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 wordDriver
  11. {
  12.     public static void main(String[] args)throws IOException,ClassNotFoundException,InterruptedException
  13.     {
  14.         Configuration conf=new Configuration();
  15.         //创建配置对象
  16.         Job wcjob=Job.getInstance(conf);
  17.         //获取conf的作业job
  18.         wcjob.setJarByClass(wordDriver.class);
  19.         //设置运行的主类
  20.         wcjob.setMapperClass(wordMapper.class);
  21.         //设置运行的mapper类
  22.         wcjob.setReducerClass(wordReducer.class);
  23.         //设置运行的reducer类
  24.         wcjob.setMapOutputKeyClass(Text.class);
  25.         wcjob.setMapOutputValueClass(LongWritable.class);
  26.         //设置运行的mapper类输出的key-value数据类型
  27.         wcjob.setOutputKeyClass(Text.class);    
  28.         wcjob.setOutputValueClass(LongWritable.class);
  29.         //指定作业job的输入和输出类型
  30.         FileInputFormat.setInputPaths(wcjob,"/word");
  31.         FileOutputFormat.setOutputPath(wcjob,new Path("/output"));
  32.         //指定作业job,提交和返回时成功的标志
  33.         boolean res=wcjob.waitForCompletion(true);
  34.         System.out.println(res?0:1);
  35.     }
  36. }

5.打包工程,使用xtfp,win等工具上传至虚拟机

 

 

 后续一直点next,直到选择类

 

 

 6.使用xtfp上传至虚拟机,直接拖动即可,登录xtfp和连接xshell步骤一样,使用ip地址,输入密码,用户名

2.在Hadoop01查看运行MapReducer_jar包

1.查看

2.运行jar包

 3.运行成功(不一定都是这个界面)

4.查看运行成果


总结

1.导入库时,由于eclipse不能将三个文件夹内容一起导入,要分三次导入文件夹内容

2.不要随意移动库路径

3.可以登入50070查看

是否成功

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

闽ICP备14008679号