Как запустить файл jar в hadoop?

Я создал файл jar, используя файл java из этот блог используя следующие инструкции

javac -classpath /usr/local/hadoop/hadoop-core-1.0.3.jar -d /home/hduser/dir Dictionary.java

/usr/lib/jvm/jdk1.7.0_07/bin/jar cf Dictionary.jar /home/hduser/dir

теперь я попытался запустить эту банку в hadoop с помощью hit и trial различных команд

1hduser@ubuntu:~$ /usr/local/hadoop/bin/hadoop jar Dictionary.jar

выход:

Warning: $HADOOP_HOME is deprecated.

RunJar jarFile [mainClass] args...  

2.hduser@ubuntu:~$ /usr/local/hadoop/bin/hadoop jar Dictionary.jar Dictionary

выход:

Warning: $HADOOP_HOME is deprecated.

Exception in thread "main" java.lang.ClassNotFoundException: Dictionary
at java.net.URLClassLoader.run(URLClassLoader.java:366)
at java.net.URLClassLoader.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at org.apache.hadoop.util.RunJar.main(RunJar.java:149)

как я могу запустить банку в Hadoop? Я имею право места ДПП, а при необходимости мой программа.

3 ответов


я смог воспроизвести вашу проблему. Проблема в том, где вы создаете банки.

в основном, каталог, который вы упаковываете в банку, запутывает файл jar в поиске файла основного класса. Вместо этого, если вы попытаетесь сделать:

/usr/lib/jvm/jdk1.7.0_07/bin/jar cf Dictionary.jar /home/hduser/dir/Dictionary.class

т. е. упаковать файл класса специально в банку, а затем запустить:

/usr/local/hadoop/bin/hadoop jar Dictionary.jar Dictionary

он просто отлично работает при условии, что у вас есть основная функция в вашем классе под названием словарь.

в проблема в том, что когда вы упаковываете полный каталог внутри jar, jar также должен знать структуру каталогов, чтобы найти файл класса. Для этого нам нужно иметь четко определенную иерархию пакетов для определения местоположения класса. Итак, когда вы упаковываете /home/hduser/dir/ в jar, jar не знает о местоположении файла класса, который находится глубоко внутри этой структуры каталогов. Для этого нужно добавить имя пакета в свой


используйте приведенную ниже команду для запуска файла jar hadoop из командной строки.

hadoop jar <jarFileName> <mainClassname> <AnyCommandLineArguements>

Я также столкнулся с той же проблемой, и консоль не показывает много информации, но просто

runjar jarFile [mainClass] args...

пожалуйста, проверьте банку для расположения папок пакета, как простой подход, пожалуйста, попробуйте пакет начинается с com.компания...

папка "com" должна быть папкой первого уровня при распаковке банки