最近我將hadoop的集群搭建起來了,並且實現了hadoop與oracle數據庫之間的交互,接下來就是進入到Mapreduce高級編程階段了,當然這必須跟相應的業務和算法有關。但是Mapreduce的開發環境勢必需要搭建的。因此,我的hadoop集群是在linux上搭建的,但是我的想法是:
1、將我的開發環境搭建到windows7的環境下,
2、采用eclipse來開發。
為了實現這個目標,於是我就百度和google了一下,通過百度,google發現要想實現我的想法必須要編譯安裝hadoop的eclipse插件,因為不同的hadoop版本對應不同的eclipse插件,因此需要自行編譯hadoop的eclipse插件。編譯eclipse插件必須要有源碼,因此通過https://github.com/winghc/hadoop2x-eclipse-plugin 下載源碼。我下載的是hadoop2x-eclipse-plugin-master.zip。源碼有了,接下來就是准備編譯了,編譯之前需要做一些准備工作,那就是需要有編譯的環境,編譯hadoop2x-eclipse-plugin-master.zip所需要的環境有:
(1)jdk1.7
安裝jdk1.7並配置相應的環境變量,參考http://www.cnblogs.com/ljy2013/articles/4414851.html
(2)ant
1)下載地址:http://ant.apache.org/bindownload.cgi
apache-ant-1.9.4-bin.zip
2)解壓文件即可,並配置相應的環境變量
ANT_HOME=E:\profession-software\apache-ant\apache-ant-1.9.4-bin\apache-ant-1.9.4
path=%path%;%ANT_HOME%\bin
驗證安裝是否成功:ant -version
(3)之前自己已經編譯過的hadoop-2.5.2的hadoop-2.5.2.tar.gz文件,解壓縮至本地。若不會編譯,請參考http://www.cnblogs.com/ljy2013/articles/4364003.html
由於編譯hadoop的eclipse插件需要hadoop相應的jar包。所以必須要有hadoop的安裝文件,前面我已經將hadoop2.5.2編譯好了,剛好可以拿過來使用。
並配置相應的環境變量:
HADOOP_HOME=E:\profession-software\hadoop\hadoop2.5.2\hadoop2.5.2-x86_64\hadoop-x86_64-2.5.2\hadoop-2.5.2
path=%path%;%HADOOP_HOME%\bin
(4)解壓縮hadoop2x-eclipse-plugin-master.zip文件,將其解壓在E:\profession-software\hadoop-eclipse-plugin\hadoop2x-eclipse-plugin-master下
通過命令行cmd進入Hadoop-eclipse-plugin解壓縮目錄下,執行
ant jar -Dversion=2.x.x -Dhadoop.version=2.x.x -Declipse.home=/opt/eclipse -Dhadoop.home=/usr/share/hadoop
Declipse.home表示的是eclipse的目錄,就是需要使用的eclipse的目錄
Dhadoop.home表示的是hadoop的目錄,即上面步驟3)的目錄。
-Dhadoop.version,-Dversion都表示的是hadoop的版本
原本以為就這樣子可以成功的,但是我心里早有准備,編譯源碼不可能這么容易成功的,要知道想當年第一次編譯hadoop源碼的時候,那是多么的艱難困苦,但都是將它拿下了。還是不錯的。下面把編譯Hadoop-eclipse-plugin的問題一個一個的說明一下:
問題1:按照上面的步驟執行命令后,首先第一個會出現的就是一直停在ivy-resolve-common處一直不動,一開始還以為要等一會,可是等了一兩個小時都沒反應,這肯定是有問題。
出現這個問題的原因是執行上面的命令的時候,會查找相應的jar包,若沒有的會一直停在那里,但實際上編譯Hadoop-eclipse-plugin並不需要common相關的包.
解決的辦法是:修改Hadoop-eclipse-plugin解壓縮目錄\src\contrib\eclipse-plugin\build.xml文件
找到:
<target name="compile" depends="init, ivy-retrieve-common" unless="skip.contrib"> 對應的行
將其去掉depends="init, ivy-retrieve-common" 修改為
<target name="compile" unless="skip.contrib"> 即可
在重新執行(4)的命令。接下來就會出現問題2
問題2:在命令行會提示copy不到相關jar包的錯誤
libraries.properties文件中的jar包的版本找不到,因為對應的是在我的hadoop2.5.2版本下編譯,該階段是將hadoop主目錄下的jar包復制到插件當中,因此需要修改jar的版本。
解決辦法:
修改Hadoop-eclipse-plugin解壓縮目錄\ivy\libraries.properties文件,將報錯的jar包版本號跟換成與"HADOOP_HOME"\share\hadoop\common\lib下面jar對應的版本號
此步可能會有多個jar包版本不匹配,需要多次修改。
問題3:出現在hadoop主目錄\share\common\lib目錄下找不到htrace-core-3.0.4.jar包,
沒辦法,我只好在網上下載htrace-core-3.0.4.jar,並將其放到hadoop主目錄\share\common\lib目錄下即可。
好了,問題都解決了,編譯成功!!!
(5)編譯好之后,會在Hadoop-eclipse-plugin解壓縮目錄下生成build文件夾,則生成的插件在
在Hadoop-eclipse-plugin解壓縮目錄\build\contrib\eclipse-plugin下生成hadoop-eclipse-plugin-2.x.x.jar插件
(6)將hadoop-eclipse-plugin-2.x.x.jar放到eclipse的plugins目錄下,啟動eclipse
(7)打開window===>prefernces, 找到Hadoop Map/Reduce選項卡
配置hadoop installation directory目錄,指向hadoop的安裝目錄
(8)打開window====>show view====>other,找到Map/Reduce Locations,使其在eclipse中顯示,可以看到eclipse上有一個大象的圖標。
(9)在Map/Reduce Locations中右鍵=====>new hadoop locations,會顯示如下圖所示:
在這里面需要配置以下參數:Host是對應集群上的Namenode節點的IP地址 ,Map/reduce Master 中的Port是對應hadoop的配置文件hdfs-site.xml中的dfs.jobtracker.address 對應的端口值,DFS Master 中Port則是hdfs-site.xml中dfs.defaultFS對應的端口的值。User name 是指你的hadoop集群用那個用戶來操作的。
若想修改更多的參數,可以點擊 Advanced Parameters選項卡,里面有各種參數設置。如下圖所示
至此,hadoop的eclipse插件已經編譯和配置好了,接下來就可以創建hadoop中的Mapreduce工程了。並進行測試了。