打开Eclipse
如果在Project Explorer中出现DFS Locations图标(需点击open perspective,选择MapReduce),则说明安装正确,如图:
③ 之后,点击Windows-->Preferrence-->hadoop map/reduce, Brower 选择下载的hadoop所在的路径:
④ 配置相关参数,点击 Windows-->Show View -->Other --> Map/Reduce Location,打开Hadoop的MapReduce View
点击Ok之后,出现如下图
⑤ 上一步你不应该看到hadoopLoc, 应该什么都没有,右键点击空白处-->New Hadoop Location, 你会看到一个填写MapReduce Location参数的一个界面:
其中:
PS:HOST 的ip地址需与你在dfs-core.xml中设置的一致
Location Name:
这个不用在意,就是对这个MapReduce的标示,只要能帮你记忆即可
Map/Reduce Master 部分相关定义:
Host:上一节搭建的集群中JobTracker所在的机器的IP地址
port:JobTracker的端口
两个参数就是 mapred-site.xml中mapred.job.tracker的ip和端口
DFS Master部分:
Host:就是上一节集群搭建中Namenode所在机器IP
Port:就是namenode的端口
这两个参数是在 core-site.xml里fs.default.name里面的ip和端口
User Name:
就是搭建Hadoop集群是所用的用户名,我这里用的是hadoop
⑥ 填写完以上信息以后,关闭Eclipse,然后重新启动。
为什么这么做呢?因为如果不重新启动,Advanced Parameters里,有些重要的选项不能显示,重启后,来配制Advanced Parameters信息:
可看到大部分选项都已经预设值好了,其中有一下几个选项,必须注意填写,其他的选项,要么默认,要么会根据我们填写的以下几个选项自动修改:
dfs.replication:
这个这里默认是3,但是要根据你的Datanode的个数来定,如果你仅有2个datanode,那么就写2,如果只有一个,就写1,大于或者等于3个,写3
hadoop.tmp.dir:
这个要跟建立的Hadoop集群配置中core-site.xml 中的hadoop.tmp.dir设置一样,填写的是/tmp/hadoop-root,这里也如是填写(我的是/usr/program/hadoop/tmp)
hadoop.job.ugi:
填成root,Tardis,其中root是我们的用户名,后边的",Tardis"一定要这么写,不能改(我配置的时候没有这个选项)
这些都填写完了之后,点击保存,重新启动Eclipse,会发现,很多Advanced Parameters里的好多选项都根据hadoop.tmp.dir重新进行了设置。
⑧ 在Eclipse中编写调试第一个Hadoop的HelloWorld程序:wordcount
建立Map/Reduce 工程
定义WordCount.Java类
这里,我下载了Hadoop源码,直接拷贝了其WordCount.java文件,代码如下:
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<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 { 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<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, 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 <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中添加一个文本文件:
hadoop fs -mkdir /input #在HDFS用户根目录下建立input文件夹
hadoop fs -put test.txt /input/ #向input文件夹里放入所在路径的test.txt文件
该步骤也可以在Eclipse中建立,首先右键点击Project Explorer中大象图标下第一个没有名字的文件夹,点击 Create New Directory,创建input文件夹,后再右键该文件夹,上传test.txt文件。此时到hadoop DFS中查看,也会发现创建成功。
Eclipse中设置输入参数
设置WordCount.java的执行参数如图
在Eclipse中执行
如图,点击 Run on Hadoop
在控制台,会有以下输出
OK,至此,Congratulations,你已经建立起自己在Windows中Eclipse下进行Hadoop MapReduce开发的基本环境设置工作,并且输出了一个属于自己的HelloWorld程序,并且稍微了解了一些hadoop日志分析的信息,你已经开始进入Hadoop的世界,剩下的,就是要不断地深入学习了。(本部分内容转自博客园 石头儿,中间加了一点自己搭建是遇到的情况)
注意如果程序运行过程中 出现Exception in thread "main" org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: file:/home/niy/workspace/mywordcount/input 的问题 见我转载的另一篇博客 http://blog.csdn.net/bloodlc/article/details/21190097