前提:已经安装好eclipse并且设置好jdk环境变量
1、把hadoop-eclipse-plugin-2.×.×.jar放到eclipse下的plugins目录中,这里版本号自己决定,我的是2.8.3
2、启动eclipse,如果1步骤没有问题,点击window>preferences,会看到下图圈红部分。
这里如果没有的话,可以试着删掉下图圈出文件再重启eclipse,如果不行就说明jar与eclipse版本有冲突,换个jar包试试。
3、配置hadoop安装路径>也就是从官网下载的hadoop解压的路径,我下载的是2.7.7版本的,与plugin插件版本不一致但是没有问题,最好还是用相近版本的。这里配置是为了创建mapreduce项目时可以自动导入hadoop相关包,如果配置错误,会发现项目编写时提醒缺少hadoop包。
4、点击window>show view,找到下图圈出tool并打开,
然后点击new hadoop location,
然后按照下图中所示填写,
完成以后点击finish,然后可以在project explorer(记得在eclipse最右边上面切换成hadoop布局)那里看到dfs locations,如下图。
5、找到hadoop在windows下运行的程序工具,winutils.exe和hadoop.dll,将winutils.exe放在hadoop安装目录下的bin目录里,hadoop.dll放在c>windows>system32 里面,否则运行程序时会报错,这里要注意的是这两个工具要和windows版本一致,我是win10,如果不一致程序也会报错。
6、配置环境变量,HADOOP_HOME就是hadoop安装路径啦,然后再path里面增加bin,这个不细说了。最好重启电脑使他生效。
7、新建map/reduce project,命名为wordcount,然后新建一个类叫WordCount,源代码下面会贴出。package org.apache.hadoop.examples;
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.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;
import org.apache.hadoop.util.GenericOptionsParser;
public class WordCount {
public static class TokenizerMapper extends
Mapper
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
public void map(Object key, Text value, Context context)
throws IOException, InterruptedException {
String line = value.toString();
StringTokenizer itr = new StringTokenizer(line);
while (itr.hasMoreTokens()) {
word.set(itr.nextToken().toLowerCase());
context.write(word, one);
}
}
}
public static class IntSumReducer extends
Reducer
private IntWritable result = new IntWritable();
public void reduce(Text key, Iterable
Context context) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
result.set(sum);
context.write(key, new IntWritable(sum));
}
}
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
String[] otherArgs = new GenericOptionsParser(conf, args)
.getRemainingArgs();
if (otherArgs.length != 2) {
System.err.println("Usage: wordcount
System.exit(2);
}
Job job = new Job(conf, "word count");
job.setJarByClass(WordCount.class);
job.setMapperClass(TokenizerMapper.class);
job.setCombinerClass(IntSumReducer.class);
job.setReducerClass(IntSumReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
这里还要在src下面新建一个log4j.properties文件,里面代码如下
# Configure logging for testing: optionally with log file
#log4j.rootLogger=debug,appender
log4j.rootLogger=info,appender
#log4j.rootLogger=error,appender
#\u8F93\u51FA\u5230\u63A7\u5236\u53F0
log4j.appender.appender=org.apache.log4j.ConsoleAppender
#\u6837\u5F0F\u4E3ATTCCLayout
log4j.appender.appender.layout=org.apache.log4j.TTCCLayout
如果没有这个文件运行时会报错找不到日志文件。
8、接下来要做运行前的准备了,首先在hdfs里面用命令新建一个input目录,hadoop fs -mkdir /input
然后hadoop fs -put test.txt /input/ #向input文件夹里放入所在路径的test.txt文件,这个文件也要自己建,自己往里面随便写几个单词。
对wordcount.java右键,run as>run configurations,然后像下图这样配置。
注意检查里面的output在hdfs下是没有的,如果已经有了先把它删除掉。
9、运行,run on hadoop,等待程序运行结束,结束后可以看到dfs locations下面蓝色小象下面会有output目录,点击第二个文件就能看到统计结果啦,到这里就结束啦!
最后是hadoop-eclipse-plugin-2.8.3.jar插件和win10下hadoop2.7.7对应的winutils.exe,hadoop.dll资源。
链接:https://pan.baidu.com/s/1kw33aDoE-sauXYUH7qzyww
提取码:v695