hadoop是一個分布式存儲和分布式計算的框架。在日常使用hadoop時,我們會發現hadoop不能完全滿足我們的需要,我們可能需要修改hadoop的源代碼並重新編譯、打包。
下面將詳細描述如何從svn上導入並對hadoop進行eclipse下編譯。
因項目使用的hadoop版本是0.20.2,所以我們基於hadoop-0.20.2來進行二次開發。
(1)首先從svn上簽出源代碼,svn地址:
http://svn.apache.org/repos/asf/hadoop/common/tags/release-0.20.2/
(2)在下載的過程中,准備開發和編譯環境。windows下至少需要安裝如下軟件:
JDK 6--需要設置PATH環境變量 ant --下載解壓后,需要將ant的bin目錄添加到PATH的環境變量上 cygwin --安裝cygwin參考http://ebiquity.umbc.edu/Tutorials/Hadoop/03%20-%20Prerequistes.html 進行安裝和配置。在選擇cygwin的安裝包盡量多選,以方便日后的開發
(3)從svn簽出后,使用命令行進入hadoop下載的HOME目錄,執行命令:
$ ant
此時,ant開始下載依賴和編譯文件。我在編譯的時候編譯錯誤。經查,是$hadoop_home/src/saveVersion.sh生成的package-info.java有問題,導致無法編譯過去。將saveVersion.sh修改一下:
unset LANG unset LC_CTYPE version=$1 user=`whoami` #此處修改成固定值,如jbm3072 date=`date` if [ -d .git ]; then revision=`git log -1 --pretty=format:"%H"` hostname=`hostname` branch=`git branch | sed -n -e 's/^* //p'` url="git://$hostname/$cwd on branch $branch" else revision=`svn info | sed -n -e 's/Last Changed Rev: \(.*\)/\1/p'` url=`svn info | sed -n -e 's/URL: \(.*\)/\1/p'` fi mkdir -p build/src/org/apache/hadoop cat << EOF | \ sed -e "s/VERSION/$version/" -e "s/USER/$user/" -e "s/DATE/$date/" \ -e "s|URL|$url|" -e "s/REV/$revision/" \ > build/src/org/apache/hadoop/package-info.java /* * Generated by src/saveVersion.sh */ @HadoopVersionAnnotation(version="VERSION", revision="REV", user="USER", date="DATE", url="URL") package org.apache.hadoop; EOF
修改后,應該就可以編譯通過了。
(4) 將eclipse-files copy到工程目錄下
執行命令:
ant eclipse-files
就可以將eclipse-files copy到工程目錄下。
(5)導入工程
打開eclipse,在File中選擇Import,然后選擇General->Exsiting Projects into Workspace, 點擊next,然后選擇Hadoop源代碼目錄,此時就可以識別hadoop為eclipse工程了,點擊Finish,稍過片刻,一個沒有錯誤的eclipse 工程就OK了。
(6)現在你就可以基於eclipse來進行修改hadoop源代碼了。