hadoop 提供了eclipse插件供编译。 要编译的源码必须是 hadoop版本.tar.gz 包里才有,bin.tar.gz 包里是没有的。具体在/src/contrib/eclipse-plugin 文件夹下,用ant 编译,编译的时候指定hadoop版本和eclipse安装目录。
但是直接编译会提示错误。错误如下:
.......
......
.....
[javac] FileStatus fs = getDFS().getFileStatus(path);
[javac] ^
[javac] 符号: 类 FileStatus
[javac] 位置: 类 DFSFile
[javac] 注: 某些输入文件使用或覆盖了已过时的 API。
[javac] 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。
[javac] 注: 某些输入文件使用了未经检查或不安全的操作。
[javac] 注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
[javac] 100 个错误
解决办法是:
先配置/src/contrib/eclipse-plugins/build.xml
找到
<path id="classpath">
然后添加
<fileset dir="${hadoop.root}/">
<include name="*.jar"/>
</fileset>
然后会减少一部分错误。
然后:
找到
<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"/>
修改完后编译就不会有问题了。编译好的文件在 /build/contrib/eclipse-plugin/hadoop-eclipse-plugin-1.2.1.jar
具体原因还在寻找~
参考:http://www.linuxidc.com/Linux/2013-10/91666.htm
另附编译好的hadoop1.2.1 eclipse插件