windows下Eclipse的Hadoop运行调试环境搭建

来源:互联网 发布:java list排序 编辑:程序博客网 时间:2024/05/17 07:51

环境说明:

  1. windows 7
  2. Eclipse mars
  3. hadoop-eclipse插件
  4. hadoop-core-1.2.1-forwinlocal.jar
  5. hadoop集群
  6. hadoop-1.2.1-bin.tar.gz

    3.4的下载地址见http://pan.baidu.com/s/1i4ejXch

首先有两种运行方式:

  1. MR程序以Local模式运行在windows本地,操作hdfs的文件。适用于利用小规模的数据集调试MR程序,之后打包成jar上传到集群进行正式的作业。
  2. MR程序直接运行在hadoop集群上,省去打包上传到集群的步骤,Eclipse的Console会打印相关信息

推荐使用第一种方式,一是由于配置简单,二是由于正式作业时间较长,这样就可以不用直接开着自己电脑上的Eclipse了。调试好的程序直接去运行即可。以下分开对两种运行模式的配置做说明。

注:为解决部分权限问题,需要将windows的用户名Administrator或者自定义的用户名修改为hadoop集群的用户名称,如root,或hadoop等。

Windows的Local模式运行

  1. 将hadoop-eclispe插件放入eclipse安装目录的plugins文件夹下
  2. 解压hadoop-1.2.1-bin.tar.gz,将hadoop-core-1.2.1.jar替换为hadoop-core-1.2.1-forwinlocal.jar。如不替换,运行时会报文件权限的错误。
  3. 启动Eclipse,打开Map/Reduce视图。window-Preferences-Hadoop Map/Reduce下选择hadoop-1.2.1-bin.tar.gz的解压目录
  4. 在视图正下方的Map/Reduce Locations页面New Hadoop Location,填入hadoop集群配置文件core-site.xml和mapred-site.xml中指定的Map/Reduce Master和DFS Master的IP地址和端口号。其余选项默认即可
  5. 在左侧的Project Explorer中即可看到DFS Location中有了我们刚才新增的hdfs。可以新建文件夹删除文件看是否已经可用。
  6. 然后New一个Project,选择Map/Reduce Project,这里我们以WordCount为例,代码如下:

    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;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();        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);        String input = "hdfs://XXX:9000/data/input";    //hdfs完整输入路径        String output = "hdfs://XXX:9000/data/output";  //hdfs完整输出路径,必须是不存在的        FileInputFormat.addInputPath(job, new Path(input));        FileOutputFormat.setOutputPath(job, new Path(output));        System.exit(job.waitForCompletion(true) ? 0 : 1);    }}
  7. 在代码区域右键,Run as-run on hadoop,即可看到wordcount正确运行。之后再将MR打包发布到集群上作业。

至此,结束。

hadoop集群模式运行

和上一部分配置步骤完全一致,有几点区别,如下:

  1. 上一部分第二步中解压完hadoop-1.2.1-bin.tar.gz,可不替换hadoop-core-1.2.1.jar。集群模式运行不存在上述的文件权限问题。
  2. WordCount程序的main方法中需要多加两行代码,在Configuration conf = new Configuration();语句后添加

    conf.set("mapred.job.tracker", "ip地址:端口号"); //MR master的ip地址和端口号conf.set("mapred.jar", "XXXXX");    //wordcount程序打包成jar的本地路径,如"E:/XXX/xxx/wordcount.jar"

如何才能打包wordcount成jar包?右击项目名,export-jar file-选择需要打包的文件(.classpath和.project可不打包),选择需要导出的jar包路径即可。

以上是所有内容。

完全Local化模式

这是写本文档时想起的。第一部分我们说的是如何利用Local模式调试MR程序,但是仍然依赖于现有的Hadoop集群的HDFS环境。其实这是完全没必要的。调试环境可以直接在windows本地进行。wordcount的main方法中指定input和output的路径可以改写为:

String input = "E:/XXX/data/input"; //本地路径即可String output = "E:/XXX/data/output";

这样整个MR程序的调试都完全脱离了hadoop的集群,完全在windows本地运行。即可以省略第一部分是步骤四。

1 0
原创粉丝点击