5 Stimmen

Wie kann ich Hadoop mit einer Java-Klasse ausführen?

Ich verfolge das Buch Hadoop: der endgültige Leitfaden .

Ich bin verwirrt über Beispiel 3-1.

Es gibt eine Java-Quelldatei, URLCat.java. Ich verwende javac zu URLCat.class kompilieren und dann mit jar um es in ein Glas zu verpacken.

In dem Buch heißt es, man solle

% hadoop URLCat hdfs://localhost/user/tom/quangle.txt

um es zu betreiben. Ich habe viele verschiedene Möglichkeiten ausprobiert, z. B.

% hadoop jar URLCat.jar .......

aber es funktionierte nicht. Ich bekam Fehler wie diesen:

Ausnahme im Thread "main" java.lang.ClassNotFoundException: hdfs://localhost/user/username/quangle/txt

Was ist der Grund dafür, und wie mache ich es richtig?

4voto

SquareCog Punkte 19031

Es ist ganz einfach:

[me@myhost ~]$ hadoop jar
RunJar jarFile [mainClass] args...

Was Sie also wollen, ist hadoop jar yourJar.jar your.class.with.Main [any args]

4voto

Jean Gateau Punkte 31

Natürlich könnte man auch cat verwenden, aber das ist nicht der Sinn der Sache (d. h. man will lernen und nicht nur versuchen, es zum Laufen zu bringen).

Wie im Buch beschrieben, müssen Sie Ihre HADOOP_CLASSPATH Umgebungsvariable. In meinem Fall, unter Verwendung des Build-Beispiels im Buch, sind alle meine Klassen bei: /media/data/hadefguide/book/build/classes

Hier ist ein Beispiel:

hduser@MuleBox ~ $ export HADOOP_CLASSPATH=
hduser@MuleBox ~ $ hadoop URLCat hdfs://localhost/user/hduser/quangle.txt
Exception in thread "main" java.lang.NoClassDefFoundError: URLCat
Caused by: java.lang.ClassNotFoundException: URLCat
    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 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: URLCat.  Program will exit.
hduser@MuleBox ~ $ export HADOOP_CLASSPATH=/media/data/hadefguide/book/build/classes
hduser@MuleBox ~ $ hadoop URLCat hdfs://localhost/user/hduser/quangle.txt
On the top of the Crumpetty Tree
The Quangle Wangle sat,
But his face you could not see,
On account of his Beaver Hat.

2voto

Punit Sachdev Punkte 31

Ich bin mir nicht sicher, wie nützlich die Antwort jetzt ist. Ich stand heute vor demselben Problem, als ich an einem Beispiel aus demselben Buch arbeitete (Hadoop Definitive Guide) Ich war in der Lage, ein Beispielprogramm wie folgt auszuführen:

  • Schreiben Sie Ihren Java-Code und speichern Sie ihn als .java Datei

  • Kompilieren Sie Ihr Java-Programm mit:

    javac -classpath <path to hadoop core and commons-cli jar file> <path to your java program file>
  • Erstellen Sie eine jar-Datei, die Ihre Klassendatei enthält:

    jar cvf <jar file> <class files to add separated by space>
  • Führen Sie die jar-Datei mit hadoop Befehlszeile:

    hadoop jar <jar file name> <class name containing your main method> <argument to the main method>

    z.B..

    hadoop jar FileSystemCat.jar FileSystemCat hdfs://localhost/user/root/MyFiles/meet_a_seer.txt

Ich hoffe, es hilft

0voto

khmarbaise Punkte 86559

El Syntax des Befehls ist ein wenig anders:

hadoop fs -cat hdfs:///user/tom/quangle.txt

Haben Sie hadoop home in Ihrem Pfad? Können Sie hadoop ohne Parameter aufrufen?

0voto

Dmytro Molkov Punkte 11

Damit der Hadoop-Befehl URLCat funktioniert, müssen Sie die Jar-Datei (URLCat.jar) in Ihren Klassenpfad aufnehmen. Dazu können Sie es in das lib/-Verzeichnis von Hadoop legen.

Damit das Hadoop-Jar URLCat.jar ausgeführt werden kann, müssen Sie ein Jar erstellen, in dem die Klasse Main definiert ist, da es sonst denkt, dass das nächste Argument in der Befehlszeile der Klassenname ist. Sie können Folgendes versuchen: hadoop jar URLCat.jar URLCat hdfs://...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X