window10下的eclipse用java连接hadoop执行mapreduce任务


一.准备工作

1.eclipse连接hadoop的插件,需要版本匹配,这有几个常用的 2 版本的插件

hadoop2x-eclipse-plugin-master

 密码:feg1

2.hadoop-common-2.2.0-bin-master,这个跟版本无关,直接用就可以。

hadoop-common-2.2.0-bin-master

密码:nr3h   


二.环境搭建

1.将 hadoop2x-eclipse-plugin-master 中对应的插件放到 eclipse 目录中的 plugin 下。




2.放入插件后重启 eclipse 生效,点击 windows->preferences->搜索hadoop,搜索出来说明成功。右边有hadoop installation directory,点击browser,选择hadoop的解压路径。点击Apply -> OK(我的hadoop是配置好的再从linux 中复制出来的,配置文件齐全,不知道没有配置的hadoop行不行。。。)



3.配置这个插件,点击 windows -> show view -> other



4.搜索 map,会出现如下图所示。



5.双击小黄象,在控制台会看到如下图



6.右击,选择第一个小蓝象。


7.配置连接信息



8.要注意的是两个端口号(hadoop2x)

port 50020是 mapred-site.xml 中配置的端口号,默认为9001

port 9000 是 core-site.xml 中配置的端口号,默认为9000


9.点击 finish 完成配置,会显示如下图,表示配置成功。



10.测试是否连接上 HDFS,点击右上角的 javaEE,会出现 DFS Locations



11.点击 DFS Locations,如果出现 HDFS 中的目录则连接成功。



12.配置HADOOP_HOME 和 path





13.配置 vinutils

将前面下载的 hadoop-common-2.2.0-bin-master 解压,复制 bin 里面的所有东西到本地的{HADOOP_HOME}/bin 下



14.把 hadoop-common-2.2.0-bin-master 下的bin的 hadoop.dll 放到 C:\Windows\System32 下,重启电脑



三.运行程序

1.伪造一份测试数据,并上传到HDFS中相应目录,在此省略。。


2.接下来运行 mapreduce 程序

package test;

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);
				System.out.println("hello");
			}
		}
	}

	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();
		//System.setProperty("hadoop.home.dir", "F:\\课件\\hadoop\\hadoop-2.5.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(args[0]));
		FileOutputFormat.setOutputPath(job, new Path(args[1]));
		System.exit(job.waitForCompletion(true) ? 0 : 1);

	}

}


3.将{‘HADOOP_HOME’}/etc/hadoop/log4j.properties 复制到该项目的 src 下面


右击 run as -> run configuration



4.配置路径,这个是HDFS 中的输入和输出路径

对应 new Path(args[0]) 和new Path(args[1])



5.在 console 控制台会出现类似命令行运行成功的标志表示 job 运行成功



6.结果可以在左侧看,右击蓝色小象,点击 Reconnect



嗨~磕磕绊绊总算弄出来了,下面是过程中遇到的一些问题。


1.配置连接信息的时候生搬硬套,端口号没改

注意:两个端口号有不同的作用,都是配置在hadoop集群配置文件中

一个是core-site.xml,另外一个是hdfs-site.xml 。

2.eclipse 执行 MapReduce 程序时会出现程序控制台不输出任何输出信息,没有日志信息,没有执行信息,无法知道程序执行的结果如何。

 解决方法:将 hadoop 配置文件目录($HADOOP_HOME/etc/hadoop/)下的 log4j.properties 文件 copy 进工程中的src下。

3.Exception in thread "main" java.lang.NullPointerException

解决方法:在Hadoop2的bin目录下没有winutils.exe,所以下载 hadoop-common-2.2.0-bin-master,把 bin 下面的东西都复制到 {HADOOP_HOME}/bin 中就可以了
4.Failed to locate the winutils binary in the hadoop binary path,这是找不到 winutils 这个文件。

解决方法:跟3类似,重启电脑。


参考:http://blog.csdn.net/brotherdong90/article/details/50680458

           http://www.cnblogs.com/braveym/p/6282420.html


posted @ 2017-09-27 22:35  Beeman_xia  阅读(278)  评论(0编辑  收藏  举报