我对 Hadoop 的 Eclipse 插件有这样的噩梦。首先,最新的 Hadoop 版本(即 1.1.1)甚至不包括 Eclipse 插件 jar 文件。1.0.4 版有插件,但是不能用。Hadoop 的早期版本(例如 0.22.0)有插件并且可以工作,但是这些版本的 Hadoop 很旧,我想使用最新版本。那么,Hadoop 的 Eclipse 插件有什么用呢?为什么最新版本没有插件,或者如果有,那么插件不起作用?每个人都对这个插件有这么多问题吗?我应该放弃这个插件吗?
谢谢,香农
昨天好不容易安装了hadoop-1.0.4的eclipse插件,测试成功。
插件不起作用的原因是 jar 包丢失了一些库:
您可以将这个 jar 从${hadoop}/lib 复制到${jar}/lib,并且不要忘记修改MANIFEST。
为方便起见,我在${eclipse-plugin-src}/build.xml目标jar中添加了一些代码
<copy file="${hadoop.root}/build/ivy/lib/Hadoop/common/commons-cli-${commons-cli.version}.jar" todir="${build.dir}/lib" verbose="true"/>
<copy file="${hadoop.root}/lib/commons-configuration-${commons-configuration.version}.jar" todir="${build.dir}/lib" verbose="true"/>
<copy file="${hadoop.root}/lib/commons-httpclient-${commons-httpclient.version}.jar" todir="${build.dir}/lib" verbose="true"/>
<copy file="${hadoop.root}/lib/commons-lang-${commons-lang.version}.jar" todir="${build.dir}/lib" verbose="true"/>
<copy file="${hadoop.root}/lib/jackson-core-asl-${jackson.version}.jar" todir="${build.dir}/lib" verbose="true"/>
<copy file="${hadoop.root}/lib/jackson-mapper-asl-${jackson.version}.jar" todir="${build.dir}/lib" verbose="true"/>
并在${eclipse-plugin-src}/META-INF中修改了MANIFEST.MF
undle-ClassPath: classes/,
lib/hadoop-core.jar,
lib/commons-cli-1.2.jar,
lib/commons-configuration-1.6.jar,
lib/jackson-core-asl-1.8.8.jar,
lib/commons-httpclient-3.0.1.jar,
lib/jackson-mapper-asl-1.8.8.jar,
lib/commons-lang-2.4.jar
重建 eclipse-plugin,玩得开心!
好吧,结合 hs3180 的回答,这就是我在配置编译时实际所做的。
在${eclipse-plugin-src}/build.xml中,使用以下指令包含 eclipse-plugin 所需的 jar。请注意,现在直接从 from${hadoop.root}/build
复制而不是 from ,因为如果您使用的是 hadoop 的编译版本,则该文件夹实际上是空的。出于同样的原因,现在复制的是。hadoop-core-${version}.jar
${hadoop.root}
${hadoop.root}/build
commons-cli-${commons-cli.version}.jar
${hadoop.root}/lib
<!-- <copy file="${hadoop.root}/build/hadoop-core-${version}.jar" tofile="${build.dir}/lib/hadoop-core.jar" verbose="true"/> -->
<!-- <copy file="${hadoop.root}/build/ivy/lib/Hadoop/common/commons-cli-${commons-cli.version}.jar" todir="${build.dir}/lib" verbose="true"/> -->
<copy file="${hadoop.root}/hadoop-core-${version}.jar" tofile="${build.dir}/lib/hadoop-core.jar" verbose="true"/>
<copy file="${hadoop.root}/lib/commons-cli-${commons-cli.version}.jar" todir="${build.dir}/lib" verbose="true"/>
<copy file="${hadoop.root}/lib/commons-configuration-${commons-configuration.version}.jar" todir="${build.dir}/lib" verbose="true"/>
<copy file="${hadoop.root}/lib/commons-httpclient-${commons-httpclient.version}.jar" todir="${build.dir}/lib" verbose="true"/>
<copy file="${hadoop.root}/lib/commons-lang-${commons-lang.version}.jar" todir="${build.dir}/lib" verbose="true"/>
<copy file="${hadoop.root}/lib/jackson-core-asl-${jackson.version}.jar" todir="${build.dir}/lib" verbose="true"/>
<copy file="${hadoop.root}/lib/jackson-mapper-asl-${jackson.version}.jar" todir="${build.dir}/lib" verbose="true"/>
修改${eclipse-plugin-src}/META-INF/MANIFEST.MF文件以适应对${eclipse-plugin-src}/build.xml 所做的更改。
Bundle-ClassPath: classes/,
lib/hadoop-core.jar,
lib/commons-cli-1.2.jar,
lib/commons-configuration-1.6.jar,
lib/jackson-core-asl-1.8.8.jar,
lib/commons-httpclient-3.0.1.jar,
lib/jackson-mapper-asl-1.8.8.jar,
lib/commons-lang-2.4.jar
在两处修改${hadoop.root}/src/contrib/build-contrib.xml文件。首先是设置插件编译所需的属性。第二个是确保 jars,尤其是hadoop-core-1.0.4.jar
文件${hadoop.root}
夹中的 jars 对 javac 可见,因为 eclipse-plugin 引用了 hadoop 类。此设置在目的上与前两个不同,因此不是可有可无的。
<!-- Properties added for compiling eclipse-plugin -->
<!-- http://yiyujia.blogspot.com/2012/11/build-hadoop-eclipse-plugin-from-source.html -->
<property name="eclipse.home" location="/Users/xuj/Downloads/eclipse/"/>
<property name="version" value="1.0.4"/>
<property name="commons-cli.version" value="1.2"/>
<!-- the normal classpath -->
<path id="contrib-classpath">
<fileset dir="${hadoop.root}">
<include name="*.jar" />
</fileset>
<!-- more path elements go here -->
</path>
正确配置所有文件后,从控制台中调用“ ant jar ”${eclipse-plugin-src}/
就足够了。