《转载》hadoop cdh3u3 eclipse插件编译

时间:2023-01-21 17:40:39

1. 编译环境

操作系统:debian6 amd64,安装ant和maven2这两个java打包工具。

hadoop:hadoop-0.20.2-cdh3u3.tar.gz

eclipse:eclipse-java-indigo-SR2-win32.zip

2. 编译hadoop

解压源码hadoop-0.20.2-cdh3u3.tar.gz并进入,执行ant,自动下载依赖并编译。

3. 编译eclipse plugin

解压eclipse。

进入hadoop源码的src/contrib/eclipse-plugin目录下,执行:

ant -Declipse.home=/eclipse解压目录/ -Dversion=0.20.2-cdh3u3 jar

4. 测试

在hadoop源码的build/contrib/eclipse-plugin中有hadoop-eclipse-plugin-0.20.2-cdh3u3.jar。拷贝至eclipse的plugins目录下,启动eclipse。 启动后报错:

An internal error occurred during: "Connecting to DFS localhost".

查看eclipse错误日志,显示:

java.lang.NoClassDefFoundError: org/apache/hadoop/thirdparty/guava/common/collect/LinkedListMultimap

还有一个错误:

java.lang.NoClassDefFoundError: org/codehaus/jackson/map/JsonMappingException

说明eclipse找不到guava和jackson包。

5. 修复bug

首先,在hadoop源码的lib目录下拷贝出guava-r09-jarjar.jar,jackson-mapper-asl-1.5.2.jar包。

5.1 方法一

把guava-r09-jarjar.jar,jackson-mapper-asl-1.5.2.jar中的字节码(org目录)解压至hadoop-eclipse-plugin-0.20.2-cdh3u3.jar的classes下。

5.2 方法二

把guava-r09-jarjar.jar,jackson-mapper-asl-1.5.2.jar放到hadoop-eclipse-plugin-0.20.2-cdh3u3.jar的lib目录下。

然后,修改该包META-INF目录下的MANIFEST.MF,将classpath修改为一下内容:

Bundle-ClassPath: classes/,lib/hadoop-core.jar,lib/guava-r09-jarjar.jar,lib/jackson-mapper-asl-1.5.2.jar

方法二理论上可以,但我测试未成功。