0


通过在idea上搭建虚拟hadoop环境使用MapReduce做词频去重

idea上的MapReduce

​ 一般在开发中,若是等到环境搭配好了再进行测试或者统计数据,数据处理等操作,那会很耽误时间,所以一般都是2头跑,1波人去在客户机上搭建环境,1波人通过在idea上搭建虚拟hadoop环境,然后再虚拟环境下编写测试功能代码

使用Java API实现MapReduce经典案例

【案例1:数据去重】

1)配置windows下的hadoop环境变量

步骤1:将hadoop的安装包解压到指定位置(本例指定位置是:C:\Program Files)

在这里插入图片描述

步骤2:新建系统环境变量HADOOP_HOME

在这里插入图片描述

步骤3:编辑系统环境变量path

在这里插入图片描述

步骤4:添加windows系统的依赖文件,在hadoop安装路径下添加winutils.exe,winutils.pdb和hadoop.dll共3个文件

在这里插入图片描述

注意:

1)一定要重启电脑让以上配置生效(有时候不用重启也可以)

2)在命令提示符cmd中找不到hadoop的版本不影响后续编程

在这里插入图片描述

2)配置好Maven

步骤1:将maven相关文件夹apache-maven-3.6.0放在D盘的根目录

步骤2:使用idea新建maven项目,并做如下maven设置

在这里插入图片描述

3)编辑pom.xml文件,添加Maven库依赖

在这里插入图片描述

  1. <dependencies><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>3.1.3</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>3.1.3</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>3.1.3</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency></dependencies>

4)Map阶段的实现:编写DedupMapper.java代码 (教材P116

在这里插入图片描述

  1. packagecom.xyzy;importorg.apache.hadoop.fs.Path;importorg.apache.hadoop.io.NullWritable;importorg.apache.hadoop.mapreduce.Job;importorg.apache.hadoop.mapreduce.lib.input.FileInputFormat;importorg.apache.hadoop.mapreduce.lib.output.FileOutputFormat;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.io.Text;importjava.io.IOException;publicclassDedupDriver{publicstaticvoid main (String[] args)throwsIOException,ClassNotFoundException,InterruptedException{Configuration conf =newConfiguration();Job job =Job.getInstance(conf);
  2. job.setJarByClass(DedupDriver.class);
  3. job.setMapperClass(DedupMapper.class);
  4. job.setReducerClass(DedupReducer.class);
  5. job.setOutputKeyClass(Text.class);
  6. job.setOutputValueClass(NullWritable.class);FileInputFormat.setInputPaths(job,newPath("D:/testdata/input"));FileOutputFormat.setOutputPath(job,newPath("D:/testdata/output2"));boolean res = job.waitForCompletion(true);System.exit(res ?0:1);}}

5)Reduce阶段的实现:编写DedupReducer.java代码(教材P117)

在这里插入图片描述

  1. packagecom.xyzy;importorg.apache.hadoop.io.LongWritable;importorg.apache.hadoop.io.NullWritable;importorg.apache.hadoop.io.Text;importorg.apache.hadoop.mapreduce.Mapper;importjava.io.IOException;publicclassDedupMapperextendsMapper<LongWritable,Text,Text,NullWritable>{privatestaticText field =newText();
  2. @ Overrideprotectedvoidmap(LongWritable key,Text value ,Context context)throwsIOException,InterruptedException{
  3. field = value;
  4. context.write(field,NullWritable.get());}}

6)驱动类的实现:编写DedupDriver.java代码(教材P117)

在这里插入图片描述

  1. packagecom.xyzy;importorg.apache.hadoop.io.NullWritable;importorg.apache.hadoop.io.Text;importorg.apache.hadoop.mapreduce.Reducer;importjava.io.IOException;publicclassDedupReducerextendsReducer<Text,NullWritable,Text,NullWritable>{
  2. @ Overrideprotectedvoidreduce(Text key,Iterable<NullWritable>value,Context context)throwsIOException,InterruptedException{
  3. context.write(key,NullWritable.get());}}

7)要提前在d:/testdata/input中准备好素材(提醒一下output不是自己创建的文件夹,而是运行系统自动生成的!!!)

在这里插入图片描述

8)运行后的效果:

在这里插入图片描述

自动在d:/testdata/产生目录output,内容如下:

在这里插入图片描述

如果已经产生一次结果,若再想使用去重操作,则需要改写结果存储的文件夹名,例如将output改为output1即可


本文转载自: https://blog.csdn.net/2301_79810514/article/details/139524479
版权归原作者 皆过客,揽星河 所有, 如有侵权,请联系我们删除。

“通过在idea上搭建虚拟hadoop环境使用MapReduce做词频去重”的评论:

还没有评论