最近我将hadoop的集群搭建起来了,并且实现了hadoop与oracle数据库之间的交互,接下来就是进入到Mapreduce高级编程阶段了,当然这必须跟相应的业务和算法有关。但是Mapreduce的开发环境势必需要搭建的。因此,我的hadoop集群是在linux上搭建的,但是我的想法是:
1、将我的开发环境搭建到windows7的环境下,
2、采用eclipse来开发。
为了实现这个目标,于是我就百度和google了一下,通过百度,google发现要想实现我的想法必须要编译安装hadoop的eclipse插件,因为不同的hadoop版本对应不同的eclipse插件,因此需要自行编译hadoop的eclipse插件。编译eclipse插件必须要有源码,因此通过https://github.com/winghc/hadoop2x-eclipse-plugin 下载源码。我下载的是hadoop2x-eclipse-plugin-master.zip。源码有了,接下来就是准备编译了,编译之前需要做一些准备工作,那就是需要有编译的环境,编译hadoop2x-eclipse-plugin-master.zip所需要的环境有:
(1)jdk1.7
安装jdk1.7并配置相应的环境变量,参考http://www.cnblogs.com/ljy2013/articles/4414851.html
(2)ant
1)下载地址:http://ant.apache.org/bindownload.cgi
apache-ant-1.9.4-bin.zip
2)解压文件即可,并配置相应的环境变量
ANT_HOME=E:\profession-software\apache-ant\apache-ant-1.9.4-bin\apache-ant-1.9.4
path=%path%;%ANT_HOME%\bin
验证安装是否成功:ant -version
(3)之前自己已经编译过的hadoop-2.5.2的hadoop-2.5.2.tar.gz文件,解压缩至本地。若不会编译,请参考http://www.cnblogs.com/ljy2013/articles/4364003.html
由于编译hadoop的eclipse插件需要hadoop相应的jar包。所以必须要有hadoop的安装文件,前面我已经将hadoop2.5.2编译好了,刚好可以拿过来使用。
并配置相应的环境变量:
HADOOP_HOME=E:\profession-software\hadoop\hadoop2.5.2\hadoop2.5.2-x86_64\hadoop-x86_64-2.5.2\hadoop-2.5.2
path=%path%;%HADOOP_HOME%\bin
(4)解压缩hadoop2x-eclipse-plugin-master.zip文件,将其解压在E:\profession-software\hadoop-eclipse-plugin\hadoop2x-eclipse-plugin-master下
通过命令行cmd进入Hadoop-eclipse-plugin解压缩目录下,执行
ant jar -Dversion=2.x.x -Dhadoop.version=2.x.x -Declipse.home=/opt/eclipse -Dhadoop.home=/usr/share/hadoop
Declipse.home表示的是eclipse的目录,就是需要使用的eclipse的目录
Dhadoop.home表示的是hadoop的目录,即上面步骤3)的目录。
-Dhadoop.version,-Dversion都表示的是hadoop的版本
原本以为就这样子可以成功的,但是我心里早有准备,编译源码不可能这么容易成功的,要知道想当年第一次编译hadoop源码的时候,那是多么的艰难困苦,但都是将它拿下了。还是不错的。下面把编译Hadoop-eclipse-plugin的问题一个一个的说明一下:
问题1:按照上面的步骤执行命令后,首先第一个会出现的就是一直停在ivy-resolve-common处一直不动,一开始还以为要等一会,可是等了一两个小时都没反应,这肯定是有问题。
出现这个问题的原因是执行上面的命令的时候,会查找相应的jar包,若没有的会一直停在那里,但实际上编译Hadoop-eclipse-plugin并不需要common相关的包.
解决的办法是:修改Hadoop-eclipse-plugin解压缩目录\src\contrib\eclipse-plugin\build.xml文件
找到:
<target name="compile" depends="init, ivy-retrieve-common" unless="skip.contrib"> 对应的行
将其去掉depends="init, ivy-retrieve-common" 修改为
<target name="compile" unless="skip.contrib"> 即可
在重新执行(4)的命令。接下来就会出现问题2
问题2:在命令行会提示copy不到相关jar包的错误
libraries.properties文件中的jar包的版本找不到,因为对应的是在我的hadoop2.5.2版本下编译,该阶段是将hadoop主目录下的jar包复制到插件当中,因此需要修改jar的版本。
解决办法:
修改Hadoop-eclipse-plugin解压缩目录\ivy\libraries.properties文件,将报错的jar包版本号跟换成与"HADOOP_HOME"\share\hadoop\common\lib下面jar对应的版本号
此步可能会有多个jar包版本不匹配,需要多次修改。
问题3:出现在hadoop主目录\share\common\lib目录下找不到htrace-core-3.0.4.jar包,
没办法,我只好在网上下载htrace-core-3.0.4.jar,并将其放到hadoop主目录\share\common\lib目录下即可。
好了,问题都解决了,编译成功!!!
(5)编译好之后,会在Hadoop-eclipse-plugin解压缩目录下生成build文件夹,则生成的插件在
在Hadoop-eclipse-plugin解压缩目录\build\contrib\eclipse-plugin下生成hadoop-eclipse-plugin-2.x.x.jar插件
(6)将hadoop-eclipse-plugin-2.x.x.jar放到eclipse的plugins目录下,启动eclipse
(7)打开window===>prefernces, 找到Hadoop Map/Reduce选项卡
配置hadoop installation directory目录,指向hadoop的安装目录
(8)打开window====>show view====>other,找到Map/Reduce Locations,使其在eclipse中显示,可以看到eclipse上有一个大象的图标。
(9)在Map/Reduce Locations中右键=====>new hadoop locations,会显示如下图所示:
在这里面需要配置以下参数:Host是对应集群上的Namenode节点的IP地址 ,Map/reduce Master 中的Port是对应hadoop的配置文件hdfs-site.xml中的dfs.jobtracker.address 对应的端口值,DFS Master 中Port则是hdfs-site.xml中dfs.defaultFS对应的端口的值。User name 是指你的hadoop集群用那个用户来操作的。
若想修改更多的参数,可以点击 Advanced Parameters选项卡,里面有各种参数设置。如下图所示
至此,hadoop的eclipse插件已经编译和配置好了,接下来就可以创建hadoop中的Mapreduce工程了。并进行测试了。