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"/>

推荐阅读:

相关推荐