本帖最后由 pig2 于 2014-1-2 16:30 编辑
使用Eclipse开发hadoop非常方便,在hadoop的压缩包里就有插件的jar文件(在contrib/eclipse-plugin/目录下),将它拷贝到eclipse的插件目录下(比如我的是/usr/lib/eclipse/plugins),重启eclipse就可以了,正常使用的标志是多出一个新的名叫mapreduce tools 的视图,可以用它添加新的hadoop集群(hadoop需要事先单独运行起来)。 在我使用这个插件的过程中,遇到一个诡异的版本问题。 按照这个方法,在我的机器(ubuntu 10.04 + eclipse 3.5+ hadoop 0.20.203.0)上的实践出现问题,集群配置完成后运行正常,但在eclipse里用插件添加hadoop的时候会出现:
An internal error occurred during: “Map/Reduce location status updater”.
java.lang.NoClassDefFoundError: org/codehaus/jackso/map/JsonMappingException
错误(应该是插件没有将hadoop安装目录纳入classpath,我尝试手动指定,但是没有解决)有人提供了修改的插件方案,在http://code.google.com/p/hadoop-eclipse-plugin/ 上提供下载安装 hadoop-0.20.3-dev-eclipse-plugin.jar (如果你之前已经尝试安装过出错的那个插件文件则需要改成和那个文件同名),按照这个方法修改后可以正常添加hadoop,但是无法获取hdfs数据,提示socket错误。想各种办法都没有解决,最后换到0.20.2版本(包括集群及插件,又重新配置一次,不过这次轻车熟路快很多)问题消失。 不过,使用0.20.2版本后,仍然没有办法直接通过hadoop运行mapreduce程序,需要手动运行,为此, 编写了一个makefile去运行程序,内容如下: JarFile=”wordcount-0.1.jar”
MainFunc=”net.maplef.hadoop.wordcount.WordCountDriver”
LocalOutDir=”/tmp/output” all:help
jar:
jar -cvf ${JarFile} -C bin/ . input:
hadoop fs -rmr input
hadoop fs -put ${input} input run:
hadoop jar ${JarFile} ${MainFunc} input output clean:
hadoop fs -rmr output output:
rm -rf ${LocalOutDir}
hadoop fs -get output ${LocalOutDir}
gedit ${LocalOutDir}/part-r-00000 & help:
@echo “Usage:”
@echo ” make jar – Build Jar File.”
@echo ” make input input=yourinputpath – Set up Input Path”
@echo ” make clean – Clean up Output directory on HDFS.”
@echo ” make run – Run your MapReduce code on Hadoop.”
@echo ” make output – Download and show output file”
@echo ” make help – Show Makefile options.”
@echo ” ”
@echo “Example:”
@echo ” make jar; make input input=/home/username/hadoop-test/input/*; make run; make output; make clean”
|