2014-05-10 23 views
2

我想讓Accumulo在OSX Mavericks上工作。我有Java 1.8,最新的Zookeeper和Hadoop通過Homebrew安裝。這兩個似乎都正常工作。Java - Accumulo init在OSX Mavericks上的異常 - log4j logger

我下載了Accumulo二進制文件,我已經編輯在accumulo/conf目錄/ accumulo-env.sh這些行:

test -z "$HADOOP_PREFIX"  && export HADOOP_PREFIX=/usr/local/Cellar/hadoop/2.4.0 
test -z "$HADOOP_CONF_DIR"  && export HADOOP_CONF_DIR="$HADOOP_PREFIX/libexec/etc/hadoop" 
test -z "$JAVA_HOME"    && export JAVA_HOME=$(/usr/libexec/java_home) 
test -z "$ZOOKEEPER_HOME"  && export ZOOKEEPER_HOME=/usr/local/Cellar/zookeeper/3.4.6 

然而,當我運行bin/accumulo init,我得到:

$ bin/accumulo init 
Uncaught exception: java.lang.NoClassDefFoundError: org/apache/log4j/Logger 
java.lang.NoClassDefFoundError: org/apache/log4j/Logger 
    at org.apache.accumulo.start.classloader.AccumuloClassLoader.<clinit>(AccumuloClassLoader.java:78) 
    at org.apache.accumulo.start.Main.main(Main.java:39) 
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:372) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 2 more 

我找不到任何有用的搜索結果。我不確定什麼可能會被錯誤地配置爲導致這樣的錯誤,所以我不知道從哪裏開始。

我還沒有對Zookeeper或Hadoop的配置進行任何更改,因此Hadoop處於其基本獨立模式,我已經通過他們的一個示例確認其工作。 Zookeeper使用zkServer正確啓動/停止。所以我猜測問題出在我的Accumulo配置中。不幸的是,他們的README對我的情況根本沒有任何幫助,基本上只是告訴我,我下載的Accumulo二進制文件應該可以開箱即用。

我試着運行這與環境變量JAVA_HOME都設置和未設置,並在accumulo-env.sh顯式定義它。

謝謝你的任何事情可以指向正確的方向。我的最終目標確實是修補GeoMesa,這取決於Accumulo的工作。

回答

3

當您配置Accumulo時,您是否編輯conf/accumulo-site.xml

我假設你正在使用Accumulo 1.5.1,它看起來像你正在使用Hadoop 2.4.0。在conf/accumulo-site.xml的內部,您需要添加一些到general.classpaths屬性的路徑來獲取Hadoop使用的所有JAR。

這是你的general.classpaths屬性應該是什麼樣子:

<property> 
    <name>general.classpaths</name> 
    <!-- 
    Add the following for Hadoop2, actual needs depend on Hadoop installation details. 
    This list may be excessive, but this should cause no issues. Append these values 
    after the $HADOOP_PREFIX entries 

    $HADOOP_PREFIX/share/hadoop/common/.*.jar, 
    $HADOOP_PREFIX/share/hadoop/common/lib/.*.jar, 
    $HADOOP_PREFIX/share/hadoop/hdfs/.*.jar, 
    $HADOOP_PREFIX/share/hadoop/mapreduce/.*.jar, 
    $HADOOP_PREFIX/share/hadoop/yarn/.*.jar, 
    /usr/lib/hadoop/.*.jar, 
    /usr/lib/hadoop/lib/.*.jar, 
    /usr/lib/hadoop-hdfs/.*.jar, 
    /usr/lib/hadoop-mapreduce/.*.jar, 
    /usr/lib/hadoop-yarn/.*.jar, 
    --> 
    <value> 
    $ACCUMULO_HOME/server/target/classes/, 
    $ACCUMULO_HOME/lib/accumulo-server.jar, 
    $ACCUMULO_HOME/core/target/classes/, 
    $ACCUMULO_HOME/lib/accumulo-core.jar, 
    $ACCUMULO_HOME/start/target/classes/, 
    $ACCUMULO_HOME/lib/accumulo-start.jar, 
    $ACCUMULO_HOME/fate/target/classes/, 
    $ACCUMULO_HOME/lib/accumulo-fate.jar, 
    $ACCUMULO_HOME/proxy/target/classes/, 
    $ACCUMULO_HOME/lib/accumulo-proxy.jar, 
    $ACCUMULO_HOME/lib/[^.].*.jar, 
    $ZOOKEEPER_HOME/zookeeper[^.].*.jar, 
    $HADOOP_CONF_DIR, 
    $HADOOP_PREFIX/[^.].*.jar, 
    $HADOOP_PREFIX/lib/[^.].*.jar, 

    <!-- Added for Hadoop 2 --> 
    /usr/lib/hadoop/.*.jar, 
    /usr/lib/hadoop/lib/.*.jar, 
    /usr/lib/hadoop-hdfs/.*.jar, 
    /usr/lib/hadoop-mapreduce/.*.jar, 
    /usr/lib/hadoop-yarn/.*.jar, 
    </value> 
    <description>Classpaths that accumulo checks for updates and class files. 
    When using the Security Manager, please remove the ".../target/classes/" values. 
    </description> 
</property> 

配置之後,log4j的應該被發現。

+3

事實證明,我的問題可能是我自己的錯。我對HADOOP_PREFIX的設置應該是'HADOOP_PREFIX =/usr/local/Cellar/hadoop/2.4.0/libexec',但我放棄了libexec部分。我在HADOOP_CONF_DIR條目中通過將libexec添加到那裏的路徑來解釋了這一點。然而,答案直接幫助我解決了這個問題,因爲我通過安裝Accumulo 1.5.1(我一直試圖使用1.6)並在乾淨的配置文件中看到註釋掉的配置提示來發現它。感謝您的答覆! – ConnorManning

+0

很高興聽到有幫助! – milk3422