HDFS ant clean tar出現問題記錄

problem 1 : “java5.home is not defined. Forrest requiers Java5. Please paa -Djava5.home=.......“

solution:下載JDK5的bin 版本並解壓,安裝,由於我是下載的.bin版本而非rpm.bin所以直接解壓;然後再command中加入提示的參數:-Djava5.home=/Path/jdk-version


problem2: forrest.home is not defined. Please pass -Dforrest.home=.......................

solution: 下載一個forrest,我下載的是0.8版本,一開始是0.9出了些問題就改成0.8了,然後在command中繼續加入conf:

-Dforrest.home=/path/apache-forrest-0.8


更改爲0.8的原因是報錯:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/fop/messaging/MessageHandler
這個事由於0.9版本的lib/core中沒有fop-0.20.5.jar這個文件而在0.8版本中存在


problem3:出現很多的sitmap的錯誤,後來發現是因爲java版本不對的原因,forrest需要run的java爲1.5而我本身運行的java版本爲1.6於是乎大費周章的將java換成了1.5的版本,繼續運行又出現了新的錯誤:

javac: invalid target release: 1.6
Usage: javac <options> <source files>
where possible options include:
-g Generate all debugging info
-g:none Generate no debugging info

這次出現的錯誤非常的離譜,鬱悶死了,就是說需要java的版本的1.6

這下子頭都大了,java版本從1.5換到1.6然後又換過來,然後錯誤就不停的在這兩個地方打轉


瘋了,爲啥HDFS沒搞好呢,使用的工具的間接依賴出現矛盾


在這個時刻幸好有人解決了這個問題,~~~~(>_<)~~~~  救世主啊

原文鏈接:http://trac.nchc.org.tw/cloud/wiki/waue/2009/0818

0. environment

編譯hadoop 需要額外安裝 ant, forrest ,而forrest 需要安裝 java-1.5 來編譯

hadoop 安裝於 /opt hadoop_home = /opt/hadoop
forrest 目錄 /opt/forrest-0.8  下載
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 可以讀此檔以瞭解到動作與其相依的訊息
    • 設定屬性值
       <property name="Name" value="Hadoop-core"/>
      
    • ant 的動作,如執行 ant docs 會參考此動作敘述
        <target name="docs" depends="forrest.check" description="檢查說明" if="forrest.home">
          <exec dir="${docs.src}" executable="${forrest.home}/bin/forrest" failοnerrοr="true">
            <env key="JAVA_HOME" value="${java5.home}"/>
          </exec>
          <copy todir="${build.docs}">
            <fileset dir="${docs.src}/build/site/" />
          </copy>
        </target>
      

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 才能跑


所以我也不ant clean 了 就直接 ant tar,然後到HdfsProxy中去執行ant 命令,最後終於生成了war包,不過現在還不知道能不能用 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章