Hadoop2 本身动手编译Hadoop的eclipse插件

前言:html

      毕业两年了,以前的工做一直没有接触过大数据的东西,对hadoop等比较陌生,因此最近开始学习了。对于我这样第一次学的人,过程仍是充满了不少疑惑和不解的,不过我采起的策略是仍是先让环境跑起来,而后在能用的基础上在多想一想为何。java

      经过这三个礼拜(基本上就是周六周日,其余时间都在加班啊T T)的探索,我目前主要完成的是:apache

  1.在Linux环境中伪分布式部署hadoop(SSH免登录),运行WordCount实例成功。 http://www.cnblogs.com/PurpleDream/p/4009070.html windows

      2.本身打包hadoop在eclipse中的插件。  http://www.cnblogs.com/PurpleDream/p/4014751.html app

      3.在eclipse中访问hadoop运行WordCount成功。  http://www.cnblogs.com/PurpleDream/p/4021191.html less

      因此我下边会分三次记录下个人过程,为本身之后查阅方便,要是能帮助到其余人,天然是更好了!eclipse

 

===============================================================长长的分割线====================================================================分布式

正文:ide

      若是你想在eclipse中安装hadoop的插件,一个很重要的问题就是hadoop的版本与eclipse版本的匹配问题,若是不匹配,可能会致使不少问题。oop

      综上,我在完成了在Linux的CentOS系统中安装hadoop并简单运行WordCount以后(具体参看本文前言中的博客连接),将学习的重点放到了hadoop的eclipse插件上。其实网上也有部分文章在介绍如何编写插件,可是因为个人eclispe版本是Juno,而以前在CentOS安装的是hadoop-1.0.1,因此没有找到彻底匹配的成功案例。因此最终决定本身也动手变异一个本身的hadoop插件。

      在有了这个想法以后,一开始会以为特别困难,可是在真正去作以后,会发现不少问题其实仍是能够解决的,只要你懂得若是使用百度和谷歌,多参考一下别人的文章,汲取精华,最终必定会成功的。

      

      第一步,肯定大体流程:

   1.首先我须要ant编译,而后就是hadoop-1.0.1.tar.gz这个安装包,还有就是eclipse。

       2.针对我本身的环境,电脑是Win7,eclispe是Juno,下载了hadoop-1.0.1.tar.gz,就差ant以前没有安装。

      

      第二步,安装ant:

   1.我参考的是这篇文章http://blog.csdn.net/yang382197207/article/details/10185251,我当时下载的是apache-ant-1.9.4,其余的步骤按照这篇文章介绍的配置就会成功。

     

      第三步,在正式创建项目以前,我在介绍下个人环境: OS: windows 7,  Eclipse: Juno,  JDK: 1.6.0_43,  Hadoop: 1.0.1

      1.首先在Eclipse中新建一个Java项目,名字叫hadoop-1.0.1-eclipse-plugin,其实这个名字你能够随意的。

      2.解压hadoop-1.0.1.tar.gz,在解压后的目录中(个人是D:\SettingUp\ITSettingUp\Hadoop\hadoop-1.0\hadoop-1.0.1),依次将下面的文件放到项目中:

         (1).将\hadoop-1.0.1\src\contrib\eclipse-plugin里面的全部文件以及\hadoop-1.0.1\src\contrib\build-contrib.xml拖拽到项目中

         (2).将根目录\hadoop-1.0.1里的全部.jar文件拖拽到eclipse项目中bin目录下。

      3.打开项目中的build-contrib.xml,作以下的配置:

         (1).找到<property name="hadoop.root" location="hadoop-1.0.1解压缩后的目录"/>

         (2).找到<property name="eclipse.home" location="本身的eclipse的目录"/> 

         (3).找到<property name="version" value="hadoop的版本号"/>

         能够参考个人配置,如图:

<property name="name" value="${ant.project.name}"/>
<property name="root" value="${basedir}"/>
<property name="hadoop.root" location="D:/SettingUp/ITSettingUp/Hadoop/hadoop-1.0/hadoop-1.0.1"/>
<property name="eclipse.home" location="D:/HaveSetted/ITHaveSetted/Eclipse"/>  
<property name="version" value="1.0.1"/>  

      4.打开项目中的build.xml,作以下的配置:

         (1).将文件开头的 <import file="../build-contrib.xml"/> 修改成 <import file="build-contrib.xml"/>

         (2).在<javac...>里以下图加入includeantruntime="on",效果以下:

<target name="compile" depends="init, ivy-retrieve-common" unless="skip.contrib">
    <echo message="contrib: ${name}"/>
    <javac
     encoding="${build.encoding}"
     srcdir="${src.dir}"
     includes="**/*.java"
     destdir="${build.classes}"
     debug="${javac.debug}"
     deprecation="${javac.deprecation}"
     includeantruntime="on">
     <classpath refid="classpath"/>
    </javac>
</target>

          (3).在<path id="classpath">中添加:<path refid="hadoop-jars"/>,效果以下:

<!-- Override classpath to include Eclipse SDK jars -->
<path id="classpath">
    <pathelement location="${build.classes}"/>
    <pathelement location="${hadoop.root}/build/classes"/>
    <path refid="eclipse-sdk-jars"/>
    <path refid="hadoop-jars"/>
</path>

           (4).在<target name="jar" depends="compile" unless="skip.contrib">这个标签里,在<copy file="${hadoop.root}/build/ivy/lib/Hadoop/common/commons-cli-${commons-cli.version}.jar"  todir="${build.dir}/lib" verbose="true"/>这个配置的下面添加以下几个jar包的配置:

<copy file="${hadoop.root}/lib/commons-configuration-1.6.jar"  todir="${build.dir}/lib" verbose="true"/>
<copy file="${hadoop.root}/lib/commons-httpclient-3.0.1.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/jackson-core-asl-1.8.8.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"/>

            最终效果如图:

<!-- Override jar target to specify manifest -->
  <target name="jar" depends="compile" unless="skip.contrib">
    <mkdir dir="${build.dir}/lib"/>
    <copy file="${hadoop.root}/build/hadoop-core-${version}.jar" tofile="${build.dir}/lib/hadoop-core-1.0.1.jar" verbose="true"/>
    <copy file="${hadoop.root}/build/ivy/lib/Hadoop/common/commons-cli-${commons-cli.version}.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/commons-httpclient-3.0.1.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/jackson-core-asl-1.8.8.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"/>
      
    <jar
      jarfile="${build.dir}/hadoop-${name}-${version}.jar"
      manifest="${root}/META-INF/MANIFEST.MF">
      <fileset dir="${build.dir}" includes="classes/ lib/"/>
      <fileset dir="${root}" includes="resources/ plugin.xml"/>
    </jar>
</target>

          (5).在文件末尾</project>标签以前添加配置:

<path id="hadoop-jars">  
     <fileset dir="${hadoop.root}/">  
         <include name="hadoop-*.jar"/>  
     </fileset>   
</path>

      5.打开hadoop-1.0.1的解压缩目录(个人是D:\SettingUp\ITSettingUp\Hadoop\hadoop-1.0\hadoop-1.0.1),复制两个jar包到对应的目录文件夹,以个人文件目录结构举例以下:

         (1).将D:\SettingUp\ITSettingUp\Hadoop\hadoop-1.0\hadoop-1.0.1\hadoop-core-1.0.1.jar 复制到D:\SettingUp\ITSettingUp\Hadoop\hadoop-1.0\hadoop-1.0.1\build\这个文件夹中

         (2).将D:\SettingUp\ITSettingUp\Hadoop\hadoop-1.0\hadoop-1.0.1\lib\commons-cli-1.2.jar复制到D:\SettingUp\ITSettingUp\Hadoop\hadoop-1.0\hadoop-1.0.1\build\ivy\lib\Hadoop\common这个文件夹中

      6.再回到eclipse,打开项目中的\META-INF\MANIFEST.MF文件,作以下的添加:

Bundle-ClassPath: classes/,
 lib/hadoop-core-1.0.1.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.ja, 

      7.通过上边的配置,基本已经完成,咱们能够编译项目了。右击build.xml文件选择 Run As Ant Build,编译成功,生成的hadoop-1.0.1-eclipse-plugin.jar在hadoop-1.0.1解压目录的\build\contrib\eclipse-plugin文件夹里面。

      

      第四步,固然就是在eclipse中配置咱们编译好的插件。

      1.把hadoop-1.0.1-eclipse-plugin.jar文件放到eclipse安装目录的plugins中,重启eclipse。重启后,会在Window->Open Perspective->Other里,看到大象图标的Map/Reduce出现,或者是window->Preferences中看到Hadoop Map/Reduce这个选项。

      2.window->Preferences中点击Hadoop Map/Reduce这个选项,将Hadoop的那个解压缩目录(个人是D:\SettingUp\ITSettingUp\Hadoop\hadoop-1.0\hadoop-1.0.1)的路径配置上,配置效果图以下:

     

      3.而后咱们在Window->Open Perspective->Other里,点击Map/Reduce,切换到这个模式,截图以下:

        

      4.切换到Map/Reduce模式后,咱们看到画面(4)中的截图,点击右下角的两个小图标,测试有没有反应,若是有反应,暂时先别配置,这个我下篇博客会具体讲。若是怎么点都没有反应,则能够作以下操做:

         (1).打开项目中的\META-INF\MANIFEST.MF文件,找到以前编译时,添加的Bundle-ClassPath: classes/  这个位置,以前咱们添加了7个jar包的配置,再增长四个,以下:

 lib/hadoop-common-0.21.0.jar,
 lib/hadoop-hdfs-0.21.0.jar,
 lib/log4j-1.2.15.jar,
 lib/hadoop-mapred-0.21.0.jar

         (2).而后咱们还须要去网上下载这四个jar包放到下面的文件夹中,以个人目录举例:D:\SettingUp\ITSettingUp\Hadoop\hadoop-1.0\hadoop-1.0.1\lib。

         (3).而后在从新编译便可,在替换原来的插件时,在重启eclipse的过程当中,你能够这样作:先删除原来的插件,原来重启eclipse,确认Map/Reduce没了;而后再关掉eclipse,将新的插件放到plugins里,以后再次启动eclipse。解决这个问题时我在网上参考的文章是:http://blog.csdn.net/kky2010_110/article/details/7774747,你们也能够看看~。

         (4).上边所提到的截图以下:

        

     

      通过上边说的这些步骤,eclipse中的hadoop插件咱们算是编译完了,这个过程当中必定要注意的是,不要怕失败,多尝试,由于hadoop版本与eclipse版本是有关系的,因此致使你的版本和个人不太一致,可能会失败,可是也可能会成功。因此在这里再次提醒,注意文章开始,我对本身的环境的版本的介绍,尤为是eclipse和hadoop的版本。建议你们若是有时间的话,能够先无论版本,按照个人步骤先走一遍,若是实在是不成功的话,则能够找个和我同样的eclipse和hadoop版本,再体验一回。由于,我在这个过程当中,就发现,因为是第一次学hadoop,不见到成功的效果,总以为少点什么,总想见识一下,莫取笑哈~

     至于下一步,若是配置Location和运行WordCount,我会在下一篇博客中具体说明,谢谢支持,以为文章还不错的话,多多点赞,多多留言哈,这将使我充满动力!

相关文章
相关标签/搜索