欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

windows 32位eclipse远程hadoop开发环境搭建

程序员文章站 2024-03-13 12:44:15
本文假设hadoop环境在远程机器(如linux服务器上),hadoop版本为2.5.2 注:本文主要参考了并在其基础上有所调整 由于我喜欢在win7 64位上安装...

本文假设hadoop环境在远程机器(如linux服务器上),hadoop版本为2.5.2

注:本文主要参考了并在其基础上有所调整

由于我喜欢在win7 64位上安装32位的软件,比如32位jdk,32位eclipse,所以虽然本文中的操作系统是win7 64位,但是所有的软件都是32位的。

软件版本:

操作系统:win7 64位

eclipse: eclipse-jee-mars-2-win32

java: 1.8.0_77 32位

hadoop:2.5.2

一、安装hadoop

1、在win7中随便找一个目录解压hadoop-2.5.2.tar.gz,比如d:\app\hadoop-2.5.2\

2、配置环境变量

hadoop_home = d:\app\hadoop-2.5.2\

二、安装hadoop eclipse插件

1、下载hadoop-eclipse-plugin

hadoop-eclipse-plugin是一个专门用于eclipse的hadoop插件,可以直接在ide环境中查看hdfs的目录和文件内容。其源代码托管于github上,官网地址是https://github.com/winghc/hadoop2x-eclipse-plugin  下载release文件夹中的hadoop-eclipse-plugin-2.6.0.jar即可

windows 32位eclipse远程hadoop开发环境搭建

2、下载windows 32位平台的hadoop插件包(hadoop.dll,winutils.exe)

由于我们的软件环境是32位的,所以需要下载32位的hadoop.dll和winutils.exe,下载地址大家可以百度 hadoop.dll 32

比如下载这个:

将winutils.exe复制到$hadoop_home\bin目录,将hadoop.dll复制到c:\windows\syswow64目录下(注:由于我们的操作系统是64位,而软件是32位,所以我们是拷到这个目录下,另外,如果你的操作系统就是32位,那么就直接拷到c:\windwos\system32目录下)

3、配置hadoop-eclipse-plugin插件

启动eclipse,window->preferences->hadoop map/reduce 指定win7上的hadoop根目录(即:$hadoop_home)

windows 32位eclipse远程hadoop开发环境搭建

切换map/reduce视图

windows->show view->other     map/reduce locations

windows 32位eclipse远程hadoop开发环境搭建

然后在下面的map/reduce locations 面板中添加新的location

windows 32位eclipse远程hadoop开发环境搭建

按照如下配置

windows 32位eclipse远程hadoop开发环境搭建

location name 这里就是起个名字,随便起

map/reduce(v2) master host 这里就是虚拟机里hadoop master对应的ip地址,下面的端口对应 hdfs-site.xml里dfs.datanode.ipc.address属性所指定的端口

dfs master port这里的端口,对应core-site.xml里fs.defaultfs所指定的端口

最后的user name要跟虚拟机里运行hadoop的用户名一致,我是用hadoop身份安装运行hadoop 2.6.0的,所以这里填写hadoop,如果你是用root安装的,相应的改成root

这些参数指定好以后,点击finish,eclipse就知道如何去连接hadoop了,一切顺利的话,在project explorer面板中,就能看到hdfs里的目录和文件了

windows 32位eclipse远程hadoop开发环境搭建

可以在文件上右击,选择删除试下,通常第一次是不成功的,会提示一堆东西,大意是权限不足之类,原因是当前的win7登录用户不是虚拟机里hadoop的运行用户,解决办法有很多,比如你可以在win7上新建一个hadoop的管理员用户,然后切换成hadoop登录win7,再使用eclipse开发,但是这样太烦,最简单的办法:

hdfs-site.xml里添加

 <property>
 <name>dfs.permissions.enabled</name>
 <value>false</value>
 </property>

总而言之,就是彻底把hadoop的安全检测关掉(学习阶段不需要这些,正式生产上时,不要这么干),最后重启hadoop,再到eclipse里,重复刚才的删除文件操作试下,应该可以了。

注:如果无法连接,请先尝试telnet 192.168.1.6 9000 (请将ip和端口换成自己的hadoop server ip和端口)确保端口可以访问。

如果telnet不成功,可能是core-site.xml里fs.defaultfs的值有问题,比如配置的是localhost:9000,可以考虑把localhost换成主机名

三、编写wordcount示例

1、新建一个项目,选择map/reduce project

windows 32位eclipse远程hadoop开发环境搭建

后面的next就行了,然后新建一个类wodcount.java 代码如下:

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);
  }
 }
 }

 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(); 
 string[] otherargs = new genericoptionsparser(conf, args).getremainingargs();
 if (otherargs.length < 2) {
  system.err.println("usage: wordcount <in> [<in>...] <out>");
  system.exit(2);
 }
 job job = job.getinstance(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);
 for (int i = 0; i < otherargs.length - 1; ++i) {
  fileinputformat.addinputpath(job, new path(otherargs[i]));
 }
 fileoutputformat.setoutputpath(job,
  new path(otherargs[otherargs.length - 1]));
 system.exit(job.waitforcompletion(true) ? 0 : 1);
 }
}


然后再src目录下创建一个log4j.properties,内容如下:(为了方便运行起来后,查看各种输出)

log4j.rootlogger=info, stdout

#log4j.logger.org.springframework=info
#log4j.logger.org.apache.activemq=info
#log4j.logger.org.apache.activemq.spring=warn
#log4j.logger.org.apache.activemq.store.journal=info
#log4j.logger.org.activeio.journal=info

log4j.appender.stdout=org.apache.log4j.consoleappender
log4j.appender.stdout.layout=org.apache.log4j.patternlayout
log4j.appender.stdout.layout.conversionpattern=%d{absolute} | %-5.5p | %-16.16t | %-32.32c{1} | %-32.32c %4l | %m%n

最终目录结构如下:

windows 32位eclipse远程hadoop开发环境搭建

2、配置运行参数

windows 32位eclipse远程hadoop开发环境搭建

因为wordcount是输入一个文件用于统计单词字,然后输出到另一个文件夹下,所以给二个参数,参考上图,在program arguments里,输入

hdfs://192.168.1.6:9000/user/nub1.txt
hdfs://192.168.1.6:9000/user/output

注意的是,如果user/nub1.txt文件没有,请先手动上传(使用eclipse中dfs location工具的右键),然后/output/ 必须是不存在的,否则程序运行到最后,发现目标目录存在,也会报错。

好了,运行即可

windows 32位eclipse远程hadoop开发环境搭建

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。