1. 程式人生 > >Hadoop2 自己動手編譯Hadoop的eclipse外掛

Hadoop2 自己動手編譯Hadoop的eclipse外掛

前言:

      畢業兩年了,之前的工作一直沒有接觸過大資料的東西,對hadoop等比較陌生,所以最近開始學習了。對於我這樣第一次學的人,過程還是充滿了很多疑惑和不解的,不過我採取的策略是還是先讓環境跑起來,然後在能用的基礎上在多想想為什麼。

      通過這三個禮拜(基本上就是週六週日,其他時間都在加班啊T T)的探索,我目前主要完成的是:

      所以我下邊會分三次記錄下我的過程,為自己以後查閱方便,要是能幫助到其他人,自然是更好了!

===============================================================長長的分割線====================================================================

正文:

如果你想在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:

      第三步,在正式建立專案之前,我在介紹下我的環境: 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,我會在下一篇部落格中具體說明,謝謝支援,覺得文章還不錯的話,多多點贊,多多留言哈,這將使我充滿動力!

相關推薦

Hadoop2 自己動手編譯Hadoop的eclipse外掛

前言:       畢業兩年了,之前的工作一直沒有接觸過大資料的東西,對hadoop等比較陌生,所以最近開始學習了。對於我這樣第一次學的人,過程還是充滿了很多疑惑和不解的,不過我採取的策略是還是先讓環境跑起來,然後在能用的基礎上在多想想為什麼。       通過這三個禮拜(基本上就是週六週日,其他時間都在

自己動手寫Android外掛化框架,讓老闆對你刮目相看

歡迎大家前往騰訊雲+社群,獲取更多騰訊海量技術實踐乾貨哦~ 本文由達文西發表於雲+社群專欄 最近在工作中接觸到了Android外掛內的開發,發現自己這種技術還缺乏最基本的瞭解,以至於在一些基本問題上浪費不少時間,如外掛Context和主工程Context的區別,許可權必須在主工程申明等,因此花了點時間瞭解

【比特幣】自己動手編譯比特幣客戶端

https://github.com/imharrywu/fastcoin本帖只談技術實現,首先我們自己來編譯一個比特幣客戶端吧, 技術討論QQ群,161928517,歡迎大家入夥(註明:csdn)。 2014.7.18更新: 靜態編譯的第三方依賴和MINGW64工具

自己動手編譯NodeMCU韌體

目前常用的編譯NodeMCU的方式主要有兩種,線上構建和本地構建。 線上構建 使用線上構建服務[NodeMCU custom builds]來定製自己的韌體,只需要在該網站選擇你需要的庫,留下郵箱,很快就能收到編譯好的韌體,這裡不多敘述。 本地

自己動手編譯mod_jk,Tomcat與JK聯結器。

我的環境是ubuntu12.04,tomcat7.0.32,apache2.2.22。 編譯出來的mod_jk.so可以直接在本機/伺服器環境上使用,省去在網上找so的麻煩。  對於apache與tomcat的整合,請參考之前的文章: 1.下載tomcat--conne

自己動手安裝交叉編譯工具鏈

一、安裝步驟: 步驟1:開啟虛擬機器,在/usr/local/下建立/usr/local/arm資料夾 步驟2:先將安裝包從Windows中弄到linux中去。可以用共享資料夾,也可以  用Samba,也可以cuteftp。 步驟3:解壓。tar -jxvf arm-

自己動手寫一個Vue外掛(MD.7)

造不完的輪子,封不完的外掛。網上什麼都有,但是有那找的功夫,自己都寫完了。漫島仍然在向前推進,只是你們看不到最新的更新內容了,剩餘的不會展示,等以後上線了再去看把。 講一下如何寫一個的Vue外掛,(以一個極其簡單的loading效果為例),會了這個其他不愁。 第一步,在compon

自己動手安裝ARM交叉編譯工具鏈

一,首先說一下在linux中安裝軟體的特點: 相比windows下安裝要稍顯複雜,linux中安裝一般有以下幾種方法: 1.線上安裝,譬如ubuntu中使用apt-get install vim 來安裝vim軟體 2.自己下載安裝包來安裝。這種方式的缺陷就是你不

自己動手豐衣足食之移動端城市選擇外掛

下載地址:http://download.csdn.net/detail/cometwo/9436021 接著上一篇純js移動端日期選擇外掛,話說今天同事又來諮詢省市縣聯動的效果在移動端中如何實現,還是老樣子,百度上一搜,誒~又全是基於jquery、zepto的,更加可恨的

自己動手寫AdobeReader書籤外掛——PDF也支援書籤

最近經常看一些PDF的電子文件,痛苦的是Adobe Reader竟然沒有提供書籤的功能,每次看完之後再回到上次看的地方都很麻,到網上一找,還真有人就做了PDF的書籤,下載一試效果不錯,於是參看了一下Adobe Reader的SDK,修改了一點地方,以更方便的使用,下面是程式的

自己動手搭建 Linux 0.12 編譯環境 — 開篇

起因 => 在想到說要搭建0.12的編譯環境之前,我一直在學習0.12的math/模組,從基礎知識延伸出很多內容都是我從未涉足過的東西。我翻看了Intel Spec的很多章節,雖然英文很差,可是我會多看一遍,久而久之,感覺比較乏味。 我不是很耐得住很長一段時間做同一件

自己動手,寫自己的lazyload,讓外掛涼快去——網站優化之圖片延時載入

最近一個專案裡,遇到一個這樣的需求:這是一個WEBAPP應用,應用所有的邏輯都聚焦在一個頁面內,客戶要求1.頁面載入速度要快,2頁面響應要快。3.這個頁面只能一屏,不能出現滾動條。因此這個頁面包含了大量的彈出層的操作。 由於這個頁面中,坑爹地包含了136張圖片,主要是很多L

自己動手定製Chromium系列之四:Chromium 58的一個編譯配置

aec_untrusted_delay_for_testing    Current value (from the default) = false      From //third_party/webrtc/modules/audio_processing/BUILD.

自己動手豐衣足食之Easyform表單驗證外掛&validate.js實時驗證

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Typ

自己動手定製Chromium系列之三:Chromium的編譯配置

Chromium下載,生成工程檔案後,我們可以通過命令,生成一份詳細編譯引數文件。我自己的除錯版引數,連結點選開啟連結。生成命令:gn args --list out/myChromium>E:\build.txt其中,常見的編譯引數,官方也單獨的使用說明,參見連結點選

自己動手寫一個Android Studio外掛

1.介紹 官方文件 在使用Android Studio開發的時候,大部分人都會使用一些外掛來提高開發效率,比如: 像這樣的外掛還有很多很多,但我們不能一直停留在用的程度,這樣太不符合程式猿的風格了,今天就讓我們自己動手來寫一個外掛,當以後自己有好的想法

自己動手編寫一個Mybatis外掛:Mybatis脫敏外掛

![](https://img2020.cnblogs.com/other/1739473/202008/1739473-20200811095651396-446323382.jpg) ## 1. 前言 在日常開發中,身份證號、手機號、卡號、客戶號等個人資訊都需要進行資料脫敏。否則容易造成個人隱私洩露,

自己動手實現springboot執行時執行java原始碼(執行時編譯、載入、註冊bean、呼叫)

  看來斷點、單步除錯還不夠硬核,根本沒多少人看,這次再來個硬核的。依然是由於apaas平臺越來越流行了,如果apaas平臺選擇了java語言作為平臺內的業務程式碼,那麼不僅僅面臨著IDE外的斷點、單步除錯,還面臨著為了實現預覽效果,需要將寫好的java原始碼動態的裝載到spring容器中然後呼叫原始碼內的某

自己動手寫一個自動登錄腳本gg

簡單 只需要 自己 不同 enum -s class rep 使用 1.下載一個sshpass工具 2.安裝sshpass,安裝到tools文件夾 3.把tools文件夾的路徑加入到/etc/bashrc vim /etc/bashrc

自己動手實現簡單權限控制

saweb 權限控制,很多項目會引入 shiro/spring-security。 shiro/spring-security 繼承 servlet-->filter抽象接口,運用合適的設計模式, 通過攔截客戶端請求,來實現各個角色對系統資源的訪問權限。 一時興起,有了自己實現權限控制的想法