hadoop 2.X 二次開發 搭建環境
1、本文件前面部分配置參照群主的(塵事隨緣) ,切記一切在linux下開發,想在win開發hadoop的就別往下看了.血淚史告訴你這簡直太難了!
下載所需資料:連結:http://pan.baidu.com/s/1eQJd7W2 密碼:ksjy
2、首先檢視包裡的附件
hadoop2.7的原始碼,hadoop-2.7.0-src.tar.gz(自己要哪個版本自己找 http://archive.apache.org/dist/)
jdk-7u71-linux-x64.gz(自己去下)
protobuf-2.5.0.tar.gz(其他版本不可以)
apache-maven-3.3.3-bin.zip
3、安裝軟體
配置系統環境
vi /etc/profile
配置JDK
export PATH
export JAVA_HOME=/opt/jdk1.7
export PATH=$PATH:$JAVA_HOME/bin
配置MVN(mvn用我的,已經設定好了國內映象)
export M2_HOME=/opt/maven3.1.1
export PATH=$PATH:$MA2_HOME/bin (中間是冒號,別二了)
別忘記source /etc/profile
然後mvn 可以檢視是否安裝好 java可以看java環境
4.安裝需要元件 (別求快,切記試一次)
yum install gcc
yum install gcc-c++
yum install make
yum install cmake
yum install openssl-devel
yum install ncurses-devel
4、安裝protoc(包裡有)
解壓縮,我的都是zip自己解吧
cd protobuf-2.5.0
./configure –prefix=/opt/protoc/
sudo make clean
make && make install
7、進入hadoop-2.6.0-src
cd hadoop-maven-plugins
mvn install 編譯一下,生成咱們的protocol檔案
8、進入eclipse 設定eclipse maven
更改eclipse的java路徑 和maven屬性 -Dmaven.multiModuleProjectDirectory=$M2_HOME
9.匯入我們的maven專案(hadoop是基於模組開發的 ,我們匯入自己模組就行啦 我這裡使用
hadoop-2.2.0-src/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core)
好了匯入專案之後本來應該maven install的 但是pom檔案是紅色的,我們先解決pom檔案
這裡會有紅色的的.因為這是protocol生成的外掛..我們前期maven install的時候已經生成了這些檔案了,如果需要自己修改protocol內容,請自行參悟,我還不會
選擇 第2個XX make…….expermetal 忽略即可
parent是紅的,,不管他,無視!..
然後maven install還是會報錯 沒有javatools
我們自己加入(記住這裡的加入的這個我們生成jar包的時候要把它給去掉,這裡加入是為了給我們開發的,不然…後果XX&*@)
然後maven install 發現成功了, 測試也通過了 ,證明我們成功能開發了,此時pom有個XX是parent的,,如果你有強迫症可以給他註釋了….
我們先測試下我們的東西能不能用…
在maper裡面的run方法我們打個樁..
10.打包
寫好儲存之後要如何把它變成一個jar包呢
1.mvn好菜- .- 我只能CD進去了 ….cd到POM檔案的這裡…hadoop-2.2.0-src/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core
2.mvn compile 編譯檔案
3.mvn package 打包
4.cd target 發現我們包有 了
11.測試 接下來我們要測試我們的這個包到底能不能用!!! 因為我這個是MR的,可以直接本地測試我就用外掛測試了
1.我的測試環境選擇在了本地的mr外掛測試(外掛怎麼用不屬於我們的討論範圍)
2.修改pom檔案 因為hadoop的包有好多,但是你需要的知道需要什麼包,然後在pom檔案中刪除自己的製作的包,再匯入我們自己編譯的包就OK啦 我的pom檔案在資料夾中, 這個pom檔案是刪除maven倉庫的 mapreduce-client-core包了的,你自己加入就行了 給大家做參考
3.run一個mapreduce.可以看到結果.
這就說明我們二次開發已經完全成功了,此時這個包放到我們叢集裡面替換以前的包也是一樣完全可以使用了,當然建議我們先單元測試一下(單元測試在原始碼裡面,每個模組都有,我們模仿就行了!)