windows 32位eclipse远程hadoop开发环境搭建
本文假设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即可
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)
切换map/reduce视图
windows->show view->other map/reduce locations
然后在下面的map/reduce locations 面板中添加新的location
按照如下配置
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里的目录和文件了
可以在文件上右击,选择删除试下,通常第一次是不成功的,会提示一堆东西,大意是权限不足之类,原因是当前的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
后面的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
最终目录结构如下:
2、配置运行参数
因为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/ 必须是不存在的,否则程序运行到最后,发现目标目录存在,也会报错。
好了,运行即可
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: 轻松掌握Java备忘录模式
下一篇: php实现微信扫码支付
推荐阅读
-
windows 32位eclipse远程hadoop开发环境搭建
-
Win7+Eclipse+Hadoop2.6.4开发环境搭建
-
Win7+Eclipse+Hadoop2.6.4开发环境搭建
-
windows下idea中搭建hadoop开发环境,向远程hadoop集群提交mapreduce任务
-
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
-
spark-windows(含eclipse配置)下本地开发环境搭建
-
windows 7 with eclipse 下hadoop应用开发环境搭建
-
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
-
spark-windows(含eclipse配置)下本地开发环境搭建
-
Java开发环境的搭建01——Eclipse篇(Windows)