经过反复尝试和查找资料之后终于在我的Macbook Pro上成功编译了Hadoop 1.0.4的Eclipse插件。由于网上查找到的资料大部分为Windows环境下的编译方法,跟Mac环境下多少有些区别,特将完整的编译过程记录下来,供有需要的朋友查阅。
具体流程如下:
1、下载Hadoop 1.0.4
下载地址:http://hadoop.apache.org/releases.html#Download
2、将hadoop解压到自定义的目录中
尽量在路径中不要出现中文名,否则可能出现问题。在本文中的路径是我在Mac桌面上建立的文件夹,实际操作中将其替换为你自己的路径即可。
我的hadoop解压路径为/Users/kevenking/Desktop/kevenking/Dev/hadoop-1.0.4
3、hadoop中没有编译好的插件,需要用hadoop提供的文件自行编译,导入hadoop的eclipse-plugin文件夹
打开eclipse,在File菜单中选择Import
在Import窗口中选择Existing Projects into Workspace
将root directory指定为/Users/kevenking/Desktop/kevenking/Dev/hadoop-1.0.4/src/contrib/eclipse-plugin,点击Finish后会自动创建名为MapReduceTools的项目
4、在项目中新建lib目录,并复制jar文件
在项目中新建lib目录,并将hadoop安装根目录的hadoop-core-1.0.4.jar文件,lib目录中的commons-cli-1.2.jar、commons-configuration-1.6.jar、commons-httpclient-3.0.1.jar、commons-lang-2.4.jar、jackson-core-asl-1.8.8.jar、jackson-mapper-asl-1.8.8.jar文件复制到新建的目录中。复制完成后,将新建目录中的hadoop-core-1.0.4.jar文件名改为hadoop-core.jar 。
5、修改hadoop-1.0.4/src/contrib目录的build-contrib.xml文件
找到<property name=”hadoop.root” location=”{root}/../../../”/>,将location中的路径修改为hadoop-1.0.4的解压路径
以我的hadoop路径为例,修改为
1 |
<property name="hadoop.root" location="/Users/kevenking/Desktop/kevenking/Dev/hadoop-1.0.4"/> |
并在该行下面添加以下两行内容:
1 2 |
<property name="eclipse.home" location="/Users/kevenking/Downloads/software/tools/MacOS/eclipse"/> <property name="version" value="1.0.4"/> |
eclipse.home是指eclipse的安装目录,需要替换为你自己的安装路径。
version的值要替换为hadoop的版本号。
6、修改MapReduceTools项目下的build.xml文件
打开build.xml文件,在文件中搜索name=”jar” ,找到的代码段如下:
将红框中的内容替换为如下内容:
1 2 3 4 5 6 7 |
<copy file="${hadoop.root}/hadoop-core-${version}.jar" tofile="${build.dir}/lib/hadoop-core.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"/> |
在build.xml文件中查找<import file=”../build-contrib.xml”/> ,在该行下面添加如下内容:
1 2 3 4 5 |
<path id="hadoop-jars"> <fileset dir="${hadoop.root}/"> <include name="hadoop-*.jar"/> </fileset> </path> |
在文件中搜索<path refid=”eclipse-sdk-jars”/>,并在该行下添加如下内容:
1 |
<path refid="hadoop-jars"/> |
7、用ant开始编译
保存build.xml文件后,在build.xml文件上点击右键,并选择Run As -> Ant Build
编译完成后在Console窗口中会显示如下信息:
Ant编译成功之后,编译后的plugin文件会保存在hadoop-1.0.4/build/contrib/eclipse-plugin文件夹中,文件名为hadoop-eclipse-plugin-1.0.4.jar 。
8、将该文件复制到eclipse安装目录的plugins文件夹下,并重启eclipse。
9、查看编译的插件是否加载成功
eclipse重启后,在eclipse的window菜单中选择Show View -> Other
在Show View窗口中选择MapReduce Tools下的Map/Reduce Locations,点击OK
eclipse界面中显示出Map/Reduce Locations窗口,说明Hadoop的eclipse插件已经成功被eclipse识别。
10、如果仍然出现错误提示,可以尝试用betterzip打开插件包hadoop-eclipse-plugin-1.0.4.jar ,可以看到插件中的目录结构。
使用编辑器打开META-INF文件夹中的MANIFEST.MF文件,在文件中搜索Bundle-ClassPath,可以看到该行内容如下:
1 |
Bundle-ClassPath: classes/,lib/hadoop-core.jar |
在该行最后指定其他jar包的文件名,修改后的内容如下:
1 |
Bundle-ClassPath: classes/,lib/hadoop-core.jar,lib/commons-cli-1.2.jar,lib/commons-configuration-1.6.jar,lib/commons-httpclient-3.0.1.jar,lib/commons-lang-2.4.jar,lib/jackson-core-asl-1.8.8.jar,lib/jackson-mapper-asl-1.8.8.jar |
保存文件后betterzip会提示文件已经被修改,点击更新文件按钮。
关闭betterzip窗口时会弹出新的提示框,询问是否存储对jar包所做的修改,点击存储按钮。
这样jar包就已经修改好了,将修改后的jar包复制到eclipse的plugins文件夹,并重新启动eclipse就能正常使用了。
厉害,厉害