在Linux下的eclipse中创建一个MapReduce工程
在上一篇文章Linux系统下eclipse中配置Hadoop插件我们简单学习了Linux中eclipse配置Hadoop插件的步骤,这篇文章我们用配置好的eclipse创建一个MapReduce工程,来实现一个简单的WordCount程序一、准备好环境首先我们需要在虚拟机中打开集群,然后检查集群是否成功启动,然后cd到eclipse目录下输入命令./eclipse 打开eclipse二、开始...
在上一篇文章Linux系统下eclipse中配置Hadoop插件我们简单学习了Linux中eclipse配置Hadoop插件的步骤,这篇文章我们用配置好的eclipse创建一个MapReduce工程,来实现一个简单的WordCount程序
一、准备好环境
首先我们需要在虚拟机中打开集群,然后检查集群是否成功启动,然后cd到eclipse目录下输入命令./eclipse
打开eclipse
二、开始创建MapReduce工程
- 配置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包自动导入
- 写入代码
工程创建好之后,会出现如下界面:
把鼠标光标放在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);
}
}
-
配置运行参数
在新建的项目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程序就演示完成了,其中有不完善不准确的地方,欢迎在评论区指出交流!
更多推荐
所有评论(0)