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
注意问题:
java.lang.UnsatisfiedLinkError: org.apache.hadoop.util.NativeCrc32.nativeComputeChunkedSumsByteArray
如果 出现上面错误 。需要重新下载
https://github.com/steveloughran/winutils/tree/master/hadoop-2.6.4/bin
2.4 前面版本和2.4 后面版本复制到 bin 和widows32目录下的文件不一样。
2、在hadoop中运行
hadoop jar /usr/local/hadoop_demo.jar test.mapreduce.WordCount /bbb.txt /output
hadoop jar 【jar包文件】 【jar包中main函数所在的类(包括包名)】 【需统计的文件】 【输出路径】
将第三方包和项目打包到一块
step1:选中要导出的项目,右键选择Export
step2:选择java/Runable JAR file
step3:选择main主程序,选择第三方包打包的形式,推荐选择第二种
step4:打开cmd,进入jar包所在的位置,执行 java -jar hzf.jar