在上一篇文章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,完成类的创建,出现如下界面:
    在这里插入图片描述
    接下来写入代码,代码如下:
package wordcount;

import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
public class WordCount{
  public static class TokenizerMapper extends Mapper<LongWritable, Text, Text, IntWritable>{
    private final static IntWritable one = new IntWritable(1);
    private Text word = new Text();
    
    public void map(LongWritable key, Text value, Context context)
    throws IOException, InterruptedException {
    	System.out.print(key);
        System.out.println(value);	
    StringTokenizer itr = new StringTokenizer(value.toString());
    System.out.print(key);
    System.out.println(value);    
    while (itr.hasMoreTokens()) {
        word.set(itr.nextToken());
        context.write(word, one);
    }
   System.out.print(word);
   System.out.println(one);  
   }
    
  }
 
 public static class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
    private IntWritable result = new IntWritable();
    public void reduce(Text key, Iterable<IntWritable> values, Context context)
    throws IOException, InterruptedException {
    int sum = 0;
    for (IntWritable val : values) {
        sum += val.get();
    }
    result.set(sum);
    context.write(key, result);
    System.out.print(key);
    System.out.println(result);
    }
     
    }
 
public static void main(String[] args) throws Exception {
    Configuration conf = new Configuration();
    if (args.length != 2) {
        System.err.println("Usage: wordcount  ");
        System.exit(2);
    }
    @SuppressWarnings("deprecation")
	Job job = new Job(conf, "wordcount");
    job.setJarByClass(WordCount.class);
    job.setMapperClass(TokenizerMapper.class);
    job.setReducerClass(IntSumReducer.class);
    job.setMapOutputKeyClass(Text.class);
    job.setMapOutputValueClass(IntWritable.class);
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);
    FileInputFormat.addInputPath(job, new Path(args[0]));
    
    //先检查一下参数所指定的输出路径是否存在,若已存在,则删除下面5行代码
    Path output = new Path(args[1]);
    FileSystem fs = FileSystem.get(conf);
    if(fs.exists(output)){
    	fs.delete(output,true);
    }
    
    FileOutputFormat.setOutputPath(job, new Path(args[1]));
    System.exit(job.waitForCompletion(true) ? 0 : 1);
    }
  }
  1. 配置运行参数
    在新建的项目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刷新一下,再运行程序,就不报错了

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

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

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

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

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐