0

Apache Nutch/Solr で次のエラーが発生します。

java.lang.RuntimeException: Error in configuring object
    at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:93)
    at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:64)
    at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:117)
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:354)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:307)
    at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:177)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:88)
    ... 5 more
Caused by: java.lang.RuntimeException: Error in configuring object
    at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:93)
    at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:64)
    at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:117)
    at org.apache.hadoop.mapred.MapRunner.configure(MapRunner.java:34)
    ... 10 more
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:88)
    ... 13 more
Caused by: java.lang.NoClassDefFoundError: opennlp/tools/sentdetect/SentenceDetector
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
    at java.lang.Class.getConstructor0(Class.java:2699)
    at java.lang.Class.newInstance0(Class.java:326)
    at java.lang.Class.newInstance(Class.java:308)
    at org.apache.nutch.plugin.Extension.getExtensionInstance(Extension.java:160)
    at org.apache.nutch.indexer.IndexingFilters.<init>(IndexingFilters.java:69)
    at org.apache.nutch.indexer.IndexerMapReduce.configure(IndexerMapReduce.java:62)
    ... 18 more
Caused by: java.lang.ClassNotFoundException: opennlp.tools.sentdetect.SentenceDetector
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:315)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:250)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:398)
    ... 26 more
2012-04-24 13:59:18,713 ERROR solr.SolrIndexer - java.io.IOException: Job failed!

OpenNLP の SentenceDetector クラスを使用するように、BasicIndexingFilter.java というフィルター クラスを変更しました。BasicIndexingFilter.java の関連部分:

SentenceDetector sentenceDetector = null;

        InputStream modelIn = null;
        try {
            // Loading sentence detection model
            modelIn = getClass().getResourceAsStream("/models/sentdetect/en-sent.bin");
            final SentenceModel sentenceModel = new SentenceModel(modelIn);
            modelIn.close();

            sentenceDetector = new SentenceDetectorME(sentenceModel);

        } catch (final IOException ioe) {
            LOG.info("Model input error");
            ioe.printStackTrace();
        } finally {
            if (modelIn != null) {
                try {
                    modelIn.close();
                } catch (final IOException e) {} // oh well!
            }
        }

これを build.xml ファイルに追加しました。

 <property name="lib.dir"     value="lib"/>

    <path id="classpath">
        <fileset dir="${lib.dir}" includes="**/*.jar"/>
    </path>

現在は正常にコンパイルされていますが、実行時エラーが発生します。私はJavaが初めてですが、ロードしようとしているモデルファイルと関係があると思います:

modelIn = getClass().getResourceAsStream("/models/sentdetect/en-sent.bin");

opennlp-tools-1.5.0.jarSentenceDetector クラスの は my にあり./lib folder、モデル ファイルen-sent.binは にあり.lib/models/sentdetectます。BasicIndexingFilter クラスは別の場所にあり、すべて Nutch の bin ファイルから実行されています。

モデルファイルを指すのに問題がありますか、それとも何か他のものですか?

4

2 に答える 2

0

jar ファイルからアプリを使用しているため、Manifest.mf をアプリに追加します。マニフェスト内に、クラスパスに追加する jar ファイルを挿入します。こちらの手順に従ってください: http://java.sun.com/developer/Books/javaprogramming/JAR/basics/manifest.html#applications これがお役に立てば幸いです。

于 2012-04-24T21:20:43.950 に答える
0

maxent 3.0.0 jarクラスパスにファイルがないと思います。これがある場合は、opennlp-tools-1.5.1-incubating.jarをライブラリに追加してみてください。

于 2012-04-24T21:15:26.167 に答える