Hadoop 1.2.1编译Eclipse插件
这几天学习Hadoop,我竟然花了一天多的时间来搭建环境。主要是自己遇到了其他文章中都没出现的问题。废话不说了,现在就开始搭建。
首先我是在Ubuntu的虚拟机下工作的,准备工作一定要做好。
一、安装jdk,此处我一开始是利用sudo apt-get install openjdk-7-jre,这样做主要是为了方便,省的配置路径,但这给后边的编译造成了麻烦,请大家注意我这里只是安装了JRE,没有安装JDK,所以必须再执行sudo apt-get install openjdk-7-jdk,这样才能把jdk成功安装上去,否则在后边变异的时候会出现javac编译不成功或者不存在之类的错误。
二、这里通常其他文章会说安装ant,但是ubuntu通常情况下会自带ant,而且版本比较高,所以我在这里就不说了。
三、再下来就是安装eclipse,在这里我要强调一下,不是所有eclipse的版本对hadoop都有支持,所以选择对的eclipse版本占到了成功的70%,就像我一开始选择eclipse3.7Indigo不论后边如何配置正确都会编译失败,原因是该版本eclipse本来就有些包不存在,你要自己下载,会浪费时间,而且即使下载下来,他的包也不是只在/plugins下,是被分在几个文件里的(从openstock上得知),所以网上的配置都不会生效。而这个版本又是ubuntu12利用apt-get install下载的默认版本,所以会造成很多问题。最后我把这个版本完完全全从机子上卸载掉,下载了eclipse4.2Juno,只需要下载classic版本就可以了其他的没必要。从官网上把该版本对应的压缩包下载到机子上解压就可以了。注:据说eclipse4.3对hadoop的支持又不好了,所以最好还是选择4.2吧。
四、下载hadoop源码,我下载的是1.2.1稳定版本,大家一定要选择源码,因为官网会提供编译好的版本和源码两个版本,编译插件要选用源码版本,就是名字中没有bin的版本。在下载的时候也会有问题,就是可能有下载不全的时候,这时tar包在解压的时候会出现错误,如果是这样,就苦逼的在下载一遍吧。
五、这一步就是其他文章都会提到的了,配置很简单,但有些文章说的太少,配置的根本有问题,有些文章说的太多,很多重复的东西。
(1)配置/${hadoop-home}/src/contrib/eclipse-plugins/build.xml
找到
<path id="classpath">
然后添加
<fileset dir="${hadoop.root}/">
<include name="*.jar"/>
</fileset>
这一步很重要,如果不添加的话会出现找不到相应的程序包,错误如下(给出部分) :
[javac] Counters.Group group = counters.getGroup(groupName);
[javac] ^
[javac] /home/summerdg/hadoop_src/hadoop-1.2.1/src/contrib/eclipse-plugin/src/java/org/apache/hadoop/eclipse/server/HadoopJob.java:305: 错误: 程序包Counters不存在
[javac] for (Counters.Counter counter : group) {
[javac] ^
[javac] /home/summerdg/hadoop_src/hadoop-1.2.1/src/contrib/eclipse-plugin/src/java/org/apache/hadoop/eclipse/dfs/DFSFile.java:74: 错误: 找不到符号
[javac] FileStatus fs = getDFS().getFileStatus(path);
[javac] ^
[javac] 符号: 类 FileStatus
[javac] 位置: 类 DFSFile
[javac] 注: 某些输入文件使用或覆盖了已过时的 API。
[javac] 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。
[javac] 注: 某些输入文件使用了未经检查或不安全的操作。
[javac] 注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
[javac] 100 个错误
当然,出现这个错误还有个原因,就是你已经设置了这句,但你依然出现这个错误,那就是你eclipse版本的问题了。
找到
<target name="jar" depends="compile" unless="skip.contrib">
删除或者注释掉下边的两个<copy file的内容,然后添加
<copy file="${hadoop.root}/hadoop-core-${version}.jar" tofile="${build.dir}/lib/hadoop-core.jar" verbose="true"/>
<copy file="${hadoop.root}/lib/commons-cli-1.2.jar" todir="${build.dir}/lib" verbose="true"/>
<copy file="${hadoop.root}/lib/commons-lang-2.4.jar" todir="${build.dir}/lib" verbose="true"/>
<copy file="${hadoop.root}/lib/commons-configuration-1.6.jar" todir="${build.dir}/lib" verbose="true"/>
<copy file="${hadoop.root}/lib/jackson-mapper-asl-1.8.8.jar" todir="${build.dir}/lib" verbose="true"/>
<copy file="${hadoop.root}/lib/jackson-core-asl-1.8.8.jar" todir="${build.dir}/lib" verbose="true"/>
<copy file="${hadoop.root}/lib/commons-httpclient-3.0.1.jar" todir="${build.dir}/lib" verbose="true"/>
推荐阅读: