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,我會在下一篇博客中具體說明,謝謝支持,以爲文章還不錯的話,多多點贊,多多留言哈,這將使我充滿動力!

相關文章
相關標籤/搜索