zoukankan      html  css  js  c++  java
  • Hadoop2 自己动手编译Hadoop的eclipse插件

    前言:

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

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

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

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

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

          所以我下边会分三次记录下我的过程,为自己以后查阅方便,要是能帮助到其他人,自然是更好了!

    ===============================================================长长的分割线====================================================================

    正文:

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

          综上,我在完成了在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:SettingUpITSettingUpHadoophadoop-1.0hadoop-1.0.1),依次将下面的文件放到项目中:

             (1).将hadoop-1.0.1srccontribeclipse-plugin里面的所有文件以及hadoop-1.0.1srccontribuild-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:SettingUpITSettingUpHadoophadoop-1.0hadoop-1.0.1),复制两个jar包到对应的目录文件夹,以我的文件目录结构举例如下:

             (1).将D:SettingUpITSettingUpHadoophadoop-1.0hadoop-1.0.1hadoop-core-1.0.1.jar 复制到D:SettingUpITSettingUpHadoophadoop-1.0hadoop-1.0.1uild这个文件夹中

             (2).将D:SettingUpITSettingUpHadoophadoop-1.0hadoop-1.0.1libcommons-cli-1.2.jar复制到D:SettingUpITSettingUpHadoophadoop-1.0hadoop-1.0.1uildivylibHadoopcommon这个文件夹中

          6.再回到eclipse,打开项目中的META-INFMANIFEST.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解压目录的uildcontribeclipse-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:SettingUpITSettingUpHadoophadoop-1.0hadoop-1.0.1)的路径配置上,配置效果图如下:

         

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

            

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

             (1).打开项目中的META-INFMANIFEST.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:SettingUpITSettingUpHadoophadoop-1.0hadoop-1.0.1lib。

             (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,我会在下一篇博客中具体说明,谢谢支持,觉得文章还不错的话,多多点赞,多多留言哈,这将使我充满动力!

          

  • 相关阅读:
    ostringstream的使用方法
    《算法导论》为什么经典
    JAVA数组的定义及用法
    具体解释Android中AsyncTask的使用
    POJ 1207 The 3n + 1 problem
    图像切割之(五)活动轮廓模型之Snake模型简单介绍
    RapeLay(电车之狼R)的结局介绍 (隐藏结局攻略)
    线程安全和线程不安全理解
    atitit...触发器机制 ltrigger mechanism sumup .的总结O8f
    winrar3.7-winrar4.0的注冊码
  • 原文地址:https://www.cnblogs.com/PurpleDream/p/4014751.html
Copyright © 2011-2022 走看看