1. 下載Hadoop原始碼
Hadoop 各成員原始碼:http://svn.apache.org/repos/asf/hadoop,請使用SVN下載,在SVN瀏覽器中將trunk目錄下的原始碼check-out 出來即可。請注意只check-out出SVN 上的trunk 目錄下的內容,如:
http://svn.apache.org/repos/asf/hadoop/common/trunk,
而不是http://svn.apache.org/repos/asf/hadoop/common,
原因是http://svn.apache.org/repos/asf/hadoop/common 目錄下包括了很多非原始碼檔案,很龐大,導致需要很長的check-out 時間。
2. 準備編譯環境
2.1. Hadoop代碼版本
本教程所採用的Hadoop 是北京時間2009-8-26 日上午下載的原始碼,和hadoop-0.19.x版本的差異可能較大。
2.2. 連網
編譯Hadoop 會依賴很多第三方庫,但編譯工具Ant 會自動從網上下載缺少的庫,所以必須保證機器能夠訪問Internet。
2.3. java
編譯Hadoop 要用JDK1.6 以上,網址:http://java.sun.com/javase/downloads/index.jsp。
安裝好之後,請設定好JAVA_HOME 環境變數。
2.4. Ant和Cygwin
需要使用Ant 工具來編譯Hadoop,而Ant 需要使用到Cygwin 提供的一些工具,如sed等,可以從:http://ant.apache.org/ivy/download.cgi 下載Ant,從http://www.cygwin.cn/下載Cygwin(Cygwin 的安裝,請參考《在Windows 上安裝Hadoop 教程》一文)。安裝好之後,需要將Ant 和Cygwin 的bin 目錄加入到環境變數PATH 中,如所示:
注意:在安裝Cygwin 時,建議將SVN 安裝上,因為在Ant 編譯過程中會通過SVN 下載
些檔案,但這個不是必須的,下載不成功時,並未見出錯,編譯仍然可以成功。
2.5. Eclipse
Eclipse 則可以從http://www.eclipse.org/downloads/上下載。
3. 編譯Hadoop
在這裡,我們以編譯Hadoop 家庭成員common 為例,對Hadoop 其它成員的編譯方法是類似的。
3.1. 編譯common成員
步驟1) 在Elipse 的Package 視圖中單擊右鍵,選擇New->Java Project,如所示:
步驟2) 選擇原始碼目錄,設定Project 名。
在所示的對話方塊中,點擊Browse 按鈕,選擇common 原始碼目錄,並設定Projectname 為common。工程匯入完成後,進入Eclipse 主介面,可以看到common 已經匯入進來,但可以看到common 上有紅叉叉,是因為Elipse 預設使用了Java Builder,而不是Ant Builder,所以下一步就是設定使用Ant Builder。
步驟3) 設定Builder 為Ant:右鍵common->Properties->Builders:
在所示的介面中,點擊New 按鈕,在彈出的對話方塊中選中Ant Builder,確定之後會彈出如下對話方塊:
點擊Browse File System 按鈕,選擇common 原始碼目錄下的build.xml 檔案,並設定Name 為common_Builder(Name 可以改成其它的,但建議使用common_Builder,因為這樣名副其實),操作結果如所示:
除所示的設定外,還需要設定如所示的Targets,建議設定成Manual Build 編譯方式,而不是Auto Build 編譯方式。因為在Auto Build 模式下,任何修改都會觸發編譯,而Manual Build 模式下,只在需要的時候,點擊編譯按鈕或菜單編譯即可。
Hadoop 各成員都需要編譯成jar,所以做如所示的一個修改:
確定之後,返回如所示的Edit Configuration 對話方塊:
上面完成後,回到Builder 的主對話方塊,再將對話方塊中的Java Builder 下移,並將它前面的勾去掉。
進入Eclipse 主介面,由於之前選擇了Manual Build,所以需要人工方式驅動編譯,編譯成功後,可以看到BUILD SUCCESSFUL 字樣。
請注意:如果所示的菜單中的Build Automatically 被勾中,則在common 的右鍵菜單中可能不會出現Build 子功能表。
在編譯過程中,Ant 會自動從網上下載所依賴的庫。common 的編譯成功結束後,可以在build 目錄下找到編譯後產生的檔案hadoop-core-0.21.0-dev.jar。
3.2. 編譯Hadoop其它成員
hdfs、mapreduce 和hive 的編譯方式同common。
4. FAQ
4.1. 連網
確保可以上internet,Ant 需要自動下載很多第三方依賴庫,如果不能連網,編譯會複雜很多。
4.2. 編譯hive
hive 的編譯相對複雜些,而且預設它會編譯多個版本的hive,建立修改shims 目錄下的ivy.xml 檔案,去掉不必要版本的編譯。
4.3. 編譯組建檔案位置
common 編譯後產生build\hadoop-core-0.21.0-dev.jar;
hdfs 編譯後產生build\hadoop-hdfs-0.21.0-dev.jar;
mapreduce 編譯後產生build\hadoop-mapred-0.21.0-dev.jar;
hive 編譯後產生build\service\hive_service.jar,請注意並沒有直接放在build 目錄下;
hbase 編譯後產生build\hbase-0.21.0-dev.jar;
有時候在編譯某個時出錯,可先跳過,編譯其它的,Refresh 之後再編譯。