我对Hadoop的Eclipse插件有这样的噩梦。首先,最新的Hadoop版本(1.1.1)甚至不包含Eclipse插件jar文件。版本1.0.4有插件,但它不起作用。早期版本的Hadoop,如0.22.0有插件,它可以工作,但是这些版本的Hadoop已经老了,我想用最新版本工作。那么,Hadoop的Eclipse插件有什么用?为什么最新版本没有插件,或者如果他们这样做,那么插件不起作用?这个插件每个人都有这么多问题吗?我应该放弃这个插件吗?
谢谢, 香农
答案 0 :(得分:5)
我昨天很难为hadoop-1.0.4安装了eclipse插件,并成功测试了它。
插件无法正常工作的原因是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.MFundle-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,并且很有趣!
答案 1 :(得分:2)
那么,结合hs3180的回答,这就是我在配置编译时的实际操作。
在 $ {eclipse-plugin-src} /build.xml 中,使用以下指令包含eclipse-plugin所需的jar文件。请注意,不是${hadoop.root}/build
,而是直接从hadoop-core-${version}.jar
复制${hadoop.root}
,因为如果您使用的是hadoop的编译版本,${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 文件。第一种是设置插件编译所需的属性。第二个是确保hadoop-core-1.0.4.jar
文件夹中的jars,尤其是${hadoop.root}
对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>
正确配置所有文件后,在控制台中从${eclipse-plugin-src}/
调用' ant jar '就足够了。