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抽象接口,運用合適的設計模式, 通過攔截客戶端請求,來實現各個角色對系統資源的訪問權限。 一時興起,有了自己實現權限控制的想法