最近我将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工程了。并进行测试了。