Hadoop是一個分布式系統基礎架構,由apache基金會維護並更新。官網地址: http://hadoop.apache.org/
Hadoop項目主要包括以下4個模組:
- Hadoop Common: 為其他Hadoop模組提供基礎設施。
- Hadoop HDFS: 一個高高靠、高輸送量的Distributed File System。
- Hadoop MapReduce: 一個分布式的計算架構,包括任務調度和叢集資源管理。
- Hadoop YARN: 一個新的MapReduce架構。有興趣的同學請參考: http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/
由於項目的需要,我只需要用到Hadoop中的前兩個子模組,即Hadoop Common和Hadoop HDFS。
在編譯源碼之前,我先介紹一下我的開發環境:
- Ubuntu 12.04 LTS
- Eclipse 4.3
- JDK1.6.0_45
- Maven 3.0.4
- SVN1.6.17
- ProtocolBuffer(貌似Ubuntu內建了,如果沒有,請自行下載安裝)
最新的Hadoop採用maven作為項目構建工具,所以系統需要安裝maven。下面正式開始Hadoop源碼的編譯之旅。
首先用svn簽出Hadoop的最新版本(hadoop 2.*):
svn checkout http://svn.apache.org/repos/asf/hadoop/common/trunk/ hadoop-dev
開啟hadoop-dev檔案夾,目錄結構如
這就是Hadoop的原始碼目錄,順便統計了一下原始碼行數,1231074(包含注釋、空行)。本文主要關心兩個子項目,分別是hadoop-common-project、hadoop-hdfs-project。
接下來就需要為匯入Eclipse構建Hadoop項目,雖然我們只關心上面提到的兩個子項目,但是為了防止後續出現依賴問題,在構建時請在項目根目錄下執行命令:
cd ~/hadoop-devmvn install -DskipTestsmvn eclipse:eclipse -DdownloadSources=true -DdownloadJavadocs=true
在執行mvn(即maven)命令時,請保證網路連接正常,因為mvn可能會下載一些Jar包來解決依賴問題。這可能需要花一段時間,完成上面的命令後,匯入eclipse的準備工作已經做好了。
在匯入之前,我們還有一個工作,就是安裝eclipse的maven外掛程式。安裝的方法這裡不做介紹。
接下來的工作是匯入Eclipse中進行編譯,開啟eclipse,步驟如下:
- 菜單File->Import...
- 選擇"Existing Projects into workspace"
- 選擇hadoop-dev目錄下的 hadoop-common-project 目錄作為根目錄
- 選擇hadoop-annotations, hadoop-auth, hadoop-auth-examples, hadoop-nfs 和 hadoop-common projects
- 單擊 "Finish"
- 菜單File->Import...
- 選擇"Existing Projects into workspace"
- 選擇hadoop-dev目錄下的hadoop-assemblies目錄作為根目錄
- 選擇hadoop-assemblies project
- 單擊"Finish"
- 菜單File->Import...
- 選擇"Existing Projects into workspace"
- 選擇hadoop-dev目錄下的hadoop-hdfs-project目錄作為根目錄
- 選擇hadoop-hdfs project
- 單擊"Finish"
由於我的項目只要用到hadoop的這幾個模組,因此只匯入了hadoop的部分模組,如果你們想匯入其他的模組進行二次開發,可按上面相同的方式匯入相應的子項目。
接下來就是利用eclipse編譯hadoop,單擊Run->Run Configuration...,會開啟回合組態對話方塊,我們可以看到左側有個Maven Build,雙擊Maven Build會建立一個配置頁,按照的方式填寫
注意,Base directory 填寫的是hadoop項目的根目錄,即 ~/hadoop-dev。單擊Run,hadoop項目就開始編譯了,這需要花一些時間,注意在這期間請保持網路連接正常。原因同上。
其實上面的過程也可以由命令列來完成,eclipse外掛程式那一步都可以省了,命令列編譯方法如下:
cd ~/hadoop-devmvn package -Pdist -DskipTests -Dtar
回到eclipse,編譯成功後,eclipse的console視窗會輸出BUILD SUCESS資訊,這表示hadoop項目已經編譯成功。
為了調試hadoop, 接下來的工作就是利用上面編譯成功的hadoop構建hadoop環境。
前面編譯的結果都儲存在各個項目的target目錄下,以hadoop-common為例,編譯的結果在 ~/hadoop-dev/hadoop-common-project/hadoop-common/target/hadoop-common-3.0.0-SNAPSHOT/ 下。這個目錄下面的結構如:
其他的比如hadoop-hdfs、hadoop-mapreduce等也在對應的target目錄下,路徑與上面的類似,裡面的目錄結構和是一樣的。
我們首先在使用者目錄下建立一個hadoop目錄(mkdir ~/hadoop),把的所在目錄下的所有項拷貝到這個建立的目錄下,由於我只用common和hdfs,因此我的拷貝過程只針對這兩個子項目。(目前我們有找到很好的方法編譯,只能編譯好後再從各個子項目中去拷貝,有解決方案的童鞋請一定留言~)
由於上面的過程比較繁瑣,我寫成了一個指令碼,稍後會發布到github上(附上github上指令碼的地址:https://github.com/meibenjin/hadoop2.0-configuration),如果你等不及了,就先將就著拷貝一下吧。完成上面的操作以後,~/hadoop下的目錄結構和一樣。
現在,我簡單介紹一下新版的hadoop的目錄結構, 看著很像linux的目錄結構吧。 bin和sbin目錄下是一些hadoop命令,ect目錄下就是設定檔了。share目錄下是hadoop需要用的一些jar包。
hadoop的配置我就不在這裡寫了(如有必要,我另寫一篇部落格),具體的配置可上hadoop網站查看官方文檔。也可以看這個部落格:http://www.cnblogs.com/scotoma/archive/2012/09/18/2689902.html 其中提到的slaves和yarn-site.xml檔案在hadoop-yarn-project下。 為了調試hadoop方便,請配置成偽分布模式。
配置成功以後,啟動hadoop相關的進程,命令如下:
hadoop namenode -formatstart-dfs.sh
查看進程是否啟動成功,輸入命令,jps得到輸出:
這表示,hadoop相關的進程已經成功啟動。
未完待續。。。
過程已經驗證:可行!!!