Я получаю исключение classnotfound. Класс, который, как утверждается, не найден, не существует, но имя класса задается как путь к списку входных файлов для моей работы по сокращению карты.Hadoop: странный ClassNotFoundException
INFO server Running: /usr/lib/hadoop/bin/hadoop --config /var/run/cloudera-scm-agent/process/155-hue/JOBSUBD/hadoop-conf jar tmp.jar /user/hduser/datasets/ /user/hduser/tmp/job_20/ mongodb://slave15/db_8.job_20
Exception in thread "main" java.lang.ClassNotFoundException: /user/hduser/datasets/
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at org.apache.hadoop.util.RunJar.main(Runjar.java:190)
Как мы можем видеть, /user/hduser/datasets/
путь к входным файлам. Почему я получаю эту ошибку как ClassNotFoundException
? Почему он видит это как класс?
Я нашел свою собственную ошибку. У меня есть структура пакета. Мне нужно указать информацию о своем пакете
/usr/lib/hadoop/bin/hadoop
--config /var/run/cloudera-scm-agent/process/155-hue/JOBSUBD/hadoop-conf
jar tmp.jar org.myorg.tmp /user/hduser/datasets/
/user/hduser/tmp/job_20/ mongodb://slave15/db_8.job_20
В моем инструменте нет возможности предоставить пакет в качестве аргумента Java. Поэтому мне не нужно иметь упаковку. Но тогда у меня есть следующая ошибка, поскольку аргумент до того, как этот путь к входному файлу отсутствует.
Мои классы находятся непосредственно в tmp.jar в корне. Я не имею в виду не org.myorg и т.д. ...
РЕШЕНИЕ:
jar cmf [manifest_file] [jar_name.jar] -C [folder_of_classes] [path_for_jar_file]
будет сливаться содержание manifest_file с сгенерированного файла манифеста в архиве JAR. Включите следующую строку в manifest_file Main-Class: [Name_Of_Class]
Да, проблема в том, что у меня нет возможности печатать WordCount после аргумента jar. Как я могу указать его в файле манифеста? Разве он не уточняется, поскольку существует только внешний класс с основным методом? – Bob
@Bob Нет, JVM не сканирует все классы на пути к классам, чтобы увидеть, есть ли только один psvm. Что значит «у вас нет возможности» включить класс? Подробнее см. В [Спецификация Jar-файла] (http://docs.oracle.com/javase/6/docs/technotes/guides/jar/jar.html), в частности [Main-Class] (http: // docs .oracle.com/javase/6/docs/technotes/guides/jar/jar.html # Main% 20Attributes). –
Я использовал специальный инструмент, который требует, чтобы файл манифеста содержал информацию основного класса. – Bob