hadoop搭建与eclipse开发环境设置并测试用列

回复 收藏
本帖最后由 oszhang 于 2013-10-21 21:43 编辑

原地址http://hi.baidu.com/itapadwyxebcfud/item/f93409341f683967033edc00
1.准备工作
1.1 完成linux上的hadoop集群安装,并且能够从windows上ftp远程到linux
http://hi.baidu.com/itapadwyxebcfud/item/dbd889c009e6c413449416d0  使用root权限配置FTP服务器
1.2 在你的本机上也安装好JDK和Eclipse
  我本机使用的Java版本是1.6的   Eclipse版本是3.3     
注意:你使用的Hadoop版本和你使用的Eclipse版本有关系,最好先百度一下。我初次用的hadoop版本是hadoop-0.20.2
1.3将hadoop安装包hadoop/contrib/eclipse-plugin/hadoop-0.20.2-eclipse-plugin拷贝到eclipse的插件目录plugin下。
     需要注意的是插件版本(及后面开发导入的所有jar包)与运行的hadoop一致,否则可能会出现EOFException异常。

2 打开Eclipse进行一些配置
2.2.1 配置好Hadoop文件到Windows上
  虽然是从本地远程去操作的,但是还是会用到本身Hadoop的安装文件(这个Hadoop安装文件要和你远程Linux的Hadoop版本要一致。
    在Linux下进入hadoop目录可以使用tar -cvf hadopp-0.20.2.tar  hadoop-0.20.2打包 然后传递出来,解压到一个目录。比如我的解压在D:/eclipse\hadoop-0.20.2下

如果插件正常工作了,可以看到一下窗口。


将Windows上的Hadoop安装目录进行指定(打开Window-----> Preference)  点击右侧的浏览加入文件

打开Window----->Show view--->other  配置mapReduce

点击OK 这样在下面就会有Map/Reduce的管理窗体。在空白处右键点击Edit Hadoop Location

参数说明如下:
Location name:任意
map/reduce master:与mapred-site.xml里面mapred.job.tracker设置一致。
DFS master:与core-site.xml里fs.default.name设置一致。
User name: 服务器上运行hadoop服务的用户名。
然后是打开“Advanced parameters”设置面板,修改相应参数。上面的参数填写以后,也会反映到这里相应的参数:
主要关注下面几个参数:
fs.defualt.name:与core-site.xml里fs.default.name设置一致。
mapred.job.tracker:与mapred-site.xml里面mapred.job.tracker设置一致。
dfs.replication:与hdfs-site.xml里面的dfs.replication一致。
hadoop.tmp.dir:与core-site.xml里hadoop.tmp.dir设置一致。
hadoop.job.ugi : hadopp,administrator,,。。。
说明:第一次设置的时候可能是没有hadoop.job.ugi和dfs.replication参数的,确认保存。打开Project Explorer中DFSLocations目录,应该可以年看到文件系统中的结构了。但是在/hadoop/mapred/system下却没有查看权限,如下图:

而且删除文件的时候也会报错:

在hdfs-site.xml里面加入
dfs.permissionsfalse
就可以了。如图:

配置节点ip 进入 C:\Windows\System32\drivers\etc\hosts
配置ip如图:与linux hadoop配置一样。http://hi.baidu.com/itapadwyxebcfud/item/506fc0dbc7bf50a86dce3fa1

3.创建工程运行WordCount例子
运行hadoop程序
首先将hadoop安装包下面的所有jar包都导到eclipse工程里。点击project--->properties

点击Add External JARs....到 D:/eclipse\hadoop-0.20.2下的全部jar包和D:/eclipse\hadoop-0.20.2\lib下面的jar包全部添加
注释:jar包一定要添加到工程里面 不然会报错
创建一个JAVA类WordCount并且将以下代码复制进去
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{

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 {
  private IntWritable result = new IntWritable();

  public void reduce(Text key, Iterable 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  {
// TODO Auto-generated method stub
   Configuration conf = new Configuration();
   conf.set("mapred.job.tracker", "192.168.1.108:9001");
  String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
   if (otherArgs.length != 2) {
     System.err.println("Usage: wordcount ");
     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);
}
}
运行程序


点击WordCount--->Arguments,在Program arguments:输入路径一定要写对;根据自己的实际情况来,没写对和出现各种错误,这个路径我就花了半个小时搞定的。
run on hadoop
  

出现结果:

下面来说说我用hadoop搭建与eclipse开发环境设置并测试遇到的一些错误:
1 首先遇到我是权限的问题
2 遇到我是导入jar包,我有些需要的包没导入,(若怕报错把jar包全部导入)
3 遇到的路径设置问题,(把以下几个.xml文件复制到工程目录的bin文件下)

路径设置不对报错:Exception in thread "main" java.lang.IllegalArgumentException: Wrong FS:         hdfs://192.168.1.108:9000/user/root/test, expected: file://、...........
解决办法:写正确的路径。
  虽然只是3个错误,但是花费了几个小时的时间,初次配置难免会遇到问题,以后遇到更多我问题我会贴出来供大家参考和一起共同学习。
http://hi.baidu.com/itapadwyxebcfud/item/f93409341f683967033edc00 非常抱歉,因为图太多了,在这里没填充,效果一点不好,想一起学习的进我的原地址。
2013-10-21 21:34 举报
已邀请:

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: