{{{ #!html
編譯 hadoop
}}} [[PageOutline]] = 0. environment = 編譯hadoop 需要額外安裝 ant, forrest ,而forrest 需要安裝 java-1.5 來編譯 || hadoop 安裝於 ||/opt || hadoop_home = /opt/hadoop || || forrest 目錄||/opt/forrest-0.8 || [http://ftp.twaren.net/Unix/Web/apache/forrest/apache-forrest-0.8.tar.gz 下載]|| || java 5 目錄||/usr/lib/jvm/java-1.5.0-sun || || || java 6 目錄||/usr/lib/jvm/java-6-sun || || = 1. svn checkout = {{{ $ cd /opt $ sudo svn co http://svn.apache.org/repos/asf/hadoop/common/trunk $ sudo mv trunk hadoop $ sudo chown `$USER:$USER` hadoop }}} = 2. forrest = * 下載並解壓縮 apache forrest 於 /opt/forrest-0.8後 {{{ $ sudo update-alternatives --set java /usr/lib/jvm/java-1.5.0-sun/jre/bin/java $ sudo update-alternatives --set javac /usr/lib/jvm/java-1.5.0-sun/bin/javac $ JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun $ cd /opt/forrest-0.8/main $ build.sh }}} = 3. ant = * 產生 Hadoop-Core-${version}.tar.gz {{{ $ sudo update-alternatives --set java /usr/lib/jvm/java-6-sun/jre/bin/java $ sudo update-alternatives --set javac /usr/lib/jvm/java-6-sun/bin/javac $ JAVA_HOME=/usr/lib/jvm/java-6-sun $ ant -Djava5.home=/usr/lib/jvm/java-1.5.0-sun -Dforrest.home=/opt/forrest-0.8 tar }}} * 產生的檔案會放在 /opt/hadoop/build 內 == A. build.xml 補充說明 == * 程式碼在 /opt/hadoop/src 內 * 改完程式碼之後,執行ant 來產生相對應檔案 * ant 的編譯規則在 build.xml 可以讀此檔以瞭解到動作與其相依的訊息 * 設定屬性值 {{{ #!text }}} * ant 的動作,如執行 '''ant docs '''會參考此動作敘述 {{{ #!xml }}} = B. 常見問題 = * 執行 ant tar 時,depends 了七個動作: compile, jar, javadoc, docs, api-report, jar-test 。 * 用java 1.6 跑, docs這個動作一直編譯不過。 * 用java 1.5 跑, compile 不過 * 因此若遇到以下問題,請在 /opt/hadoop/ 目錄下執行 '''ant clean''' 後,參照上面的程序 1, 2, 3 進行之, {{{ sitemap-v06.rng:72:31: error: datatype library "http://www.w3.org/2001/XMLSchema-datatypes" not recognized }}} 原因:用java 6 跑forrest 的 build.sh,請將 javac , java 都設成 java 5 再來run {{{ [exec] Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version number in .class file }}} 原因:compiler的javac 用java 5 ,run 卻用java 6 ,就會出現此訊息, {{{ javac: invalid target release: 1.6 }}} 原因:因為rcc 需要用java 1.6 才能跑