一、安装hadoop
参考给力星,我安装的版本是2.7.0
在linux下开发会有一些不方便,非mac档只能尝试在win上远程连接了,幸好有大神写了eclipse的hadoop插件,并且支持远程连接,于是来折腾这一环境。
二、插件安装参考http://yntmdr.blog.51cto.com/3829621/1633528
除hadoop安装包外,还需要三个文件,见网盘链接: https://pan.baidu.com/s/1dFE6UjR密码: xbfc
1.注意linux机器(可为虚拟机)中hadoop环境的配置文件core-site.xml中的localhost需要改成机器ip,为什么呢?因为本机能够通过localhost找到自己,其他机器就找不到了呢,需要通过ip查找。
2.下载插件hadoop-eclipse-plugin,将其拷到eclipse安装目录的dropins下,打开eclipse发现左边多出来一个DFS Locations。
3.解压hadoop2.7.0到windows一份,在eclipse中window->preferences->hadoop设置刚刚解压的路径,参考
4.将winutils.exe(见网盘)拷贝到hadoop-2.7.0\bin目录下,将hadoop.dll(见网盘)拷到C:\Windows\System32下面,这两个文件的版本一定要对,网盘上的是2.7的,开始我是用的2.2版本的,一直出错不知道原因- -
5.显示Map/Reduce选项卡
选择Window->Open Perspective->Other->Map/Reduce,会看到右上角有一个大象图标。
6.配置hdfs连接
点击右上角大象,切换到Map/Reduce 开发视图,点击 Eclipse软件右下角的 Map/Reduce Locations 面板,在面板中单击右键,选择 New Hadoop Location进行配置,这里面的Host为liunx机器的ip,Port分别为你在mapred-site.xml、core-site.xml的端口,我的分别为50020和9000.
7.安装好插件后,查看左侧MapReduce Location 能否直接查看hdfs文件,注意要在启动了hadoop、yarn之后再看喔,能够的话就说明插件安装没有什么问题了。
8.配置环境变量
在环境变量中添加HADOOP_HOME为解压的目录,并将hadoop-2.7.0\bin目录添加至环境变量,参考图
9.将linux上将三个配置文件拷到eclipse该工程运行目录下面,然后尝试运行wordcount,
设置输入输出参数,可以在run as配置中设置输入输出参数,更好的方法是在程序中设置otherArgs,注意路径要写全,wordcount代码(更改了otherArgs):
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<Object, Text, Text, IntWritable>{
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 {
StringTokenizer itr = new StringTokenizer(value.toString());
while (itr.hasMoreTokens()) {
word.set(itr.nextToken());
context.write(word, 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);
}
}
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
String[] otherArgs=
new String[]{"hdfs://你的ip/user/hadoop/输入路径",
"hdfs://你的ip/user/hadoop/输出路径"};
if (otherArgs.length != 2) {
System.err.println("Usage: wordcount <in> <out>");
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);
}
}
若运行如果提示没有权限操作文件等,可设置权限hadoop fs -chmod -R 777 /user
更多出错参考http://www.cnblogs.com/baixl/p/4154429.html
10.以上为本人的安装经验,可供参考,根据实际环境、hadoop安装版本等可能会发生一些小出入。