在Linux下的eclipse中创建一个MapReduce工程

在上一篇文章Linux系统下eclipse中配置Hadoop插件我们简单学习了Linux中eclipse配置Hadoop插件的步骤,这篇文章我们用配置好的eclipse创建一个MapReduce工程,来实现一个简单的WordCount程序

一、准备好环境

首先我们需要在虚拟机中打开集群,然后检查集群是否成功启动,然后cd到eclipse目录下输入命令./eclipse 打开eclipse

二、开始创建MapReduce工程

  1. 配置Hadoop路径

依次点击:顶部菜单栏的Window → Preferences,出现如下界面:在这里插入图片描述
选择左边的 Hadoop Map/Reduce,点击右边Browse…,选择Hadoop文件夹的路径即可

PS:这个步骤与运行环境无关,只是在新建工程的时候能将hadoop根目录和lib目录下的所有 jar 包自动导入

2.创建工程
依次点击:顶部菜单栏的File → New → Project,出现如下界面:
在这里插入图片描述
选择Map/Reduce Project,点击右下方 Next> 然后输入项目名称wordcount,点击右下方 Next>,再点击Finish,创建项目。此时插件会把hadoop根目录和lib目录下的所有jar包自动导入

  1. 写入代码

工程创建好之后,会出现如下界面:
在这里插入图片描述
把鼠标光标放在src上,依次点击右键 → New → Class,会出现如下界面:
在这里插入图片描述
依次在Package处输入包名wordcount和Name处输入类名WordCount,点击右下角Finish,完成类的创建,出现如下界面:
在这里插入图片描述
接下来写入代码,代码如下:

1package wordcount; 2 3import java.io.IOException; 4import java.util.StringTokenizer; 5import org.apache.hadoop.conf.Configuration; 6import org.apache.hadoop.fs.Path; 7import org.apache.hadoop.io.IntWritable; 8import org.apache.hadoop.io.LongWritable; 9import org.apache.hadoop.io.Text; 10import org.apache.hadoop.mapreduce.Job; 11import org.apache.hadoop.mapreduce.Mapper; 12import org.apache.hadoop.mapreduce.Reducer; 13import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; 14import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; 15public class WordCount{ 16 public static class TokenizerMapper extends Mapper<LongWritable, Text, Text, IntWritable>{ 17 private final static IntWritable one = new IntWritable(1); 18 private Text word = new Text(); 19 20 public void map(LongWritable key, Text value, Context context) 21 throws IOException, InterruptedException { 22 System.out.print(key); 23 System.out.println(value); 24 StringTokenizer itr = new StringTokenizer(value.toString()); 25 System.out.print(key); 26 System.out.println(value); 27 while (itr.hasMoreTokens()) { 28 word.set(itr.nextToken()); 29 context.write(word, one); 30 } 31 System.out.print(word); 32 System.out.println(one); 33 } 34 35 } 36 37 public static class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> { 38 private IntWritable result = new IntWritable(); 39 public void reduce(Text key, Iterable<IntWritable> values, Context context) 40 throws IOException, InterruptedException { 41 int sum = 0; 42 for (IntWritable val : values) { 43 sum += val.get(); 44 } 45 result.set(sum); 46 context.write(key, result); 47 System.out.print(key); 48 System.out.println(result); 49 } 50 51 } 52 53public static void main(String[] args) throws Exception { 54 Configuration conf = new Configuration(); 55 if (args.length != 2) { 56 System.err.println("Usage: wordcount "); 57 System.exit(2); 58 } 59 @SuppressWarnings("deprecation") 60 Job job = new Job(conf, "wordcount"); 61 job.setJarByClass(WordCount.class); 62 job.setMapperClass(TokenizerMapper.class); 63 job.setReducerClass(IntSumReducer.class); 64 job.setMapOutputKeyClass(Text.class); 65 job.setMapOutputValueClass(IntWritable.class); 66 job.setOutputKeyClass(Text.class); 67 job.setOutputValueClass(IntWritable.class); 68 FileInputFormat.addInputPath(job, new Path(args[0])); 69 70 //先检查一下参数所指定的输出路径是否存在,若已存在,则删除下面5行代码 71 Path output = new Path(args[1]); 72 FileSystem fs = FileSystem.get(conf); 73 if(fs.exists(output)){ 74 fs.delete(output,true); 75 } 76 77 FileOutputFormat.setOutputPath(job, new Path(args[1])); 78 System.exit(job.waitForCompletion(true) ? 0 : 1); 79 } 80 } 81 82

配置运行参数
在新建的项目wordcount,点击WordCount.java,依次单击右键 → Run As → Run Configurations,出现如下界面:
在这里插入图片描述
在弹出的界面中依次点击Java Application,单击右键 → New,这时会新建一个application名为WordCount,界面如下:
在这里插入图片描述
接下来配置运行参数,点击图中箭头所指的Arguments,在Program arguments中输入“你要传给程序的输入文件夹和你要求程序将计算结果保存的文件夹”,以笔者为例:
program arguments:
hdfs://master:9000/input hdfs://master:9000/output

在VMarguments中输入:
-Xms128m -Xmx512m -XX:MaxPermSize=256m

如图:
在这里插入图片描述
依次点击右下角的Apply → Close,回到代码界面,在代码界面依次点击右键 → Run As → Run on Hadoop

PS:我在做的时候在这一步报了如图所示的错误,原因可能是input的路径有问题,于是我选择手动创建input文件夹,步骤如下:
在这里插入图片描述
在左边的菜单中右键单击大象下面的目录,点击Create new directory,在弹出的界面中输入input,然后点击OK完成创建
在这里插入图片描述
然后右键空白处点击refresh刷新一下,再运行程序,就不报错了

创建测试文件
接下来我们需要创建一个txt文件,以笔者为例,是在用户目录下的“文档”目录下创建,命令如下:

先输入命令cd /home/nxy/文档/ cd到“文档”目录下
然后输入命令touch 文件名.txt 来创建一个txt文件
然后打开该目录,随便编辑一些内容,然后保存

开始测试
接下来打开eclipse,在左边的input文件夹,导入刚才创建好的文本文件,具体步骤如下:
右键单击input文件夹,然后点击Upload files to DFS,在弹出的界面中找到你刚才创建的txt文件,最后点击确定,将其导入
在这里插入图片描述
接下来右键空白处点击refresh刷新,然后运行刚才的wordcount.java程序,可以在下面的Console中查看结果,也可以打开左边output文件夹中的part-00000文件进行查看。

至此,wordcount程序就演示完成了,其中有不完善不准确的地方,欢迎在评论区指出交流!

代码交流 2021