由于hadoop后来的版本不再直接提供eclipse的开发插件,只提供了源码,所以需要自己动手进行编译,在网上找了一些例子,自己使用起来发现都有些问题,下面根据网上参考的和自己的实践总结如下:
环境:win7 64位系统
hadoop版本:稳定版1.2.1
eclipse版本:4.3
1. 首先是在apache官网上下载1.2.1版本的源码包,然后进行解压
2.使用使用eclipse将源码包中的src/ontrib/eclipse-plugin文件直接导入eclipse环境,eclipse默认将工程识别为MapReduceTools项目
3.然后建立工程目录下创建lib文件夹,在hadoop包下面或其lib下找到以下几个包:
commons-cli-1.2.jar,
commons-configuration-1.6.jar
commons-httpclient-3.0.1.jar
commons-lang-2.4.jar
hadoop-core-1.2.1.jar
jackson-core-asl-1.8.8.jar
jackson-mapper-asl-1.8.8.jar
然后将这几个包复制到刚建立的lib目录下并导入环境变量中,结构如下图:
4.修改build.xml文件,由于build.xml文件依赖build-contrib.xml,因此为了编译的方便性,将hadoop包下的src\contrib\下的build-contrib.xml拷贝到工程目录下,将build.xml作如下修改:
1>. 修改build-contrib.xml引用目录:
<import file="build-contrib.xml"/>
如图:
<path id="hadoop-jars">
<fileset dir="${hadoop.root}/">
<include name="hadoop-*.jar"/>
</fileset>
</path>
如图:
3>.修改打包时copy的包:
<copy file="${hadoop.root}/hadoop-core-${version}.jar" tofile="${build.dir}/lib/hadoop-core-1.2.1.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"/>
如图:
5.修改build-contrib.xml文件
1>.修改hadoop路径并添加eclipse的目录和版本属性
<property name="hadoop.root" location="F:/hadoop/hadoop-1.2.1/hadoop-1.2.1"/>
<property name="eclipse.home" location="D:/Program Files/eclipse-standard-kepler-R-win32-x86_64/eclipse" />
<property name="version" value="1.2.1"/>
如图:
6.需要修改的就这么多,在编译之前还有个地方需要特别注意下,就是要检查一下工程中的META-INF/MANIFEST.MF的Bundle-ClassPath属性是否和lib包下的包对应
如图:
笔者在编译时由于没有注意到这个问题,多次尝试编译出来的插件均不能使用,原因是插件在使用时需要依赖这些包,如果这里没有定义那么打出来的包也将不包含这些配置,就会出现插件里的lib目录下这些包都有,但是程序仍会报出找不到依赖包的异常的现象。
7.OK现在可以使用ant执行一下build.xml文件进行编译了,正常情况下应该能够编译成功了
如图:
编译成功。
此时在hadoop-1.2.1\build\contrib\eclipse-plugin目录下就产生了hadoop-eclipse-plugin-1.2.1.jar包,这个就是hadoop的eclipse插件了,把它copy到eclipse的plugins目录下重启eclipse就会出现MapReduce的视图,就可以使用了