Класс Nutch Gora не работает во время работы Nutch в режиме Hadoop
Когда я пытаюсь
hadoop jar apache-nutch-2.2.jar org.apache.nutch.crawl.Crawler crawl -dir crawl -depth 3 -topN 5
Я получаю следующую ошибку...
13/07/09 09:02:46 WARN conf.Configuration: nutch-default.xml:a attempt to override final parameter: hadoop.job.history.user.location; Ignoring.
13/07/09 09:02:46 WARN conf.Configuration: nutch-default.xml:a attempt to override final parameter: hadoop.job.history.user.location; Ignoring.
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/gora/persistency/impl/PersistentBase
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at org.apache.nutch.crawl.InjectorJob.run(InjectorJob.java:218)
at org.apache.nutch.crawl.Crawler.runTool(Crawler.java:68)
at org.apache.nutch.crawl.Crawler.run(Crawler.java:136)
at org.apache.nutch.crawl.Crawler.run(Crawler.java:250)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
at org.apache.nutch.crawl.Crawler.main(Crawler.java:257)
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.RunJar.main(RunJar.java:160)
Caused by: java.lang.ClassNotFoundException: org.apache.gora.persistency.impl.PersistentBase
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 22 more
Может кто-нибудь помочь мне исправить ошибку?
1 ответ
У вас проблемы с зависимостью от Горы. конечно apache-nutch-2.2.jar
не имеет org/apache/gora/persistency/impl/PersistentBase.class
, Вы можете проверить с помощью:
jar tf apache-nutch-2.2.jar | grep PersistentBase
Убедитесь, что вы компилируете Nutch с версией Gora 0.3.
Я полагаю, у вас нет установленных на ваших узлах hadoop зависимостей gora-*, поэтому решение состоит в том, чтобы отправить их, используя.job (вместо.jar), у которой есть все зависимости, связанные для Hadoop.
Если у вас есть эта установка:
~
| - орех /
| - apache-nutch-2.2.job
| - bin /
| - орех
а также PATH=~/nutch/bin:.....
Вы можете выполнить Nutch только с:
$ nutch inject ...
$ nutch crawl
а также nutch
Команда вызывает Hadoop, когда это необходимо.
============ обновлено ==============
Оскорбительная строка: http://grepcode.com/file/repo1.maven.org/maven2/org.apache.nutch/nutch/2.2.1/org/apache/nutch/crawl/InjectorJob.java/
============ обновление 2 =============
Вы вызываете Nutch из командной строки:
hadoop jar nutch...jar
Если вы делаете это, вы должны убедиться, что gora-core-0.x.jar
находится в пути к классам.
Если вы вызываете.job, он должен иметь lib/gora-core-0.x.jar
внутри почтового индекса. Hadoop распаковывает этот.job и добавляет lib/*
к classpath, поэтому не должно быть необходимости делать что-либо.