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
方法二理论上可以,但我测试未成功。