2017-03-25 7 views
1

Ich habe eine Jar-Datei aus Eclipse exportiert (Runnable JAR >> Kopieren Sie erforderliche Bibliotheken in einen Unterordner).Wie führe ich eine Klasse aus Java-Jar-Datei auf Hadoop?

in Java, wenn Sie die Hauptklasse in der manifest.xml festlegen können Sie ausführen:

java -jar MyTest.jar arguments 

wenn Sie eine andere Hauptklasse in der JAR-Datei ausführen möchten oder wenn Sie nicht eine Hauptklasse festgelegt haben im manifest.xml können Sie laufen:

java -cp MyTest.jar MyOtherMainClass arguments 

in Hadoop wenn Hauptklasse in manifest.xml gesetzt ist, können Sie ausführen:

hadoop jar MyTest.jar arguments 

Wenn Sie Folgendes eingeben:

hadoop jar MyTest.jar MyOtherMainClass arguments 

Es MyOtherMainClass als Argument prüfen wird (nicht als eine Klasse zu laufen) in dem „args“ Array der ursprünglichen Hauptklasse von Glas.

Nun, wenn Sie eine andere Hauptklasse in der JAR-Datei ausführen möchten, was Sie schreiben?

Ich erwarte, dass etwas Ähnliches wie:

hadoop java -cp MyTest.jar MyOtherMainClass arguments 

aber das gibt:

Error: Could not find or load main class java 

Hinweis: wenn ich "Hadoop" von "hadoop java -cp MyOtherMainClass Argumente MyTest.jar" abnehmen wird in der Regel starten

Antwort

1

Das Problem von eclipse-kommt Sie zwingt die Hauptklasse in der jAR-Datei zu setzen und Sie damit verhindern, dass die Klasse, die Sie ausführen möchten. Alles, was Sie tun müssen, ist die Hauptklasse von der manifest.xml Datei der JAR-Datei zu entfernen und laufen:

hadoop jar MyTest.jar MyOtherMainClass arguments 

hier Werfen Sie einen Blick: http://www.roman10.net/2012/07/26/specify-the-main-class-in-a-jar-file-for-hadoop/

ich den gleichen Text in dem Fall eingegeben die url gelöscht:

Hadoop Unterstützung der Ausführung von jAR-Datei. Für eine ausführbare JAR-Datei in der normalen Java-Ausführung kann man die Hauptklasse in der Befehlszeile angeben, wie in meinem vorherigen Beitrag beschrieben: wechsle zwischen Hauptklassen in einer JAR-Datei.

Allerdings sind die Regeln ein bisschen anders für ausführbare JAR-Datei mit Hadoop ausgeführt wird. Grundsätzlich gelten die folgenden Regeln (ich habe auf Hadoop 1.0.3 getestet),

Wenn eine JAR-Datei eine Hauptklasse enthält, die in der Manifestdatei angegeben ist, übernimmt hadoop die Hauptklasse, selbst wenn der Befehl eine andere Hauptklasse angibt. Dies unterscheidet sich von der normalen Java-Ausführung, bei der wir eine Hauptklasse angeben können, um die eine in der Manifestdatei zu überschreiben. Wenn eine JAR-Datei keine Hauptklasse in der Manifestdatei enthält, können Sie mit hadoop die Hauptklasse angeben. Wenn bei Eclipse ein Projekt als ausführbare JAR-Datei exportiert wird, fragt es bei der Startkonfiguration immer nach einer Hauptklasse.

Die ausgewählte Hauptklasse wird in die Manifestdatei eingefügt. Nachfolgend finden Sie den Inhalt des META-INF/MANIFEST.MF-Datei in meinem Helloworld-Projekt, in der die Hauptklasse auf HelloWorld festgelegt ist.

Manifest-Version: 1.0 Klassenpfad:. Hauptklasse: hello.HelloWorld Man kann die JAR-Datei mit einem Dateiextraktor durchsuchen, die Manifestdatei mit einem Dateieditor öffnen und einfach die letzte Zeile löschen, um die Hauptklassenkonfiguration zu entfernen und die Änderungen in der JAR-Datei zu speichern wenn Sie dazu aufgefordert werden. Dadurch wird eine ausführbare JAR-Datei ohne Hauptklasse erstellt.

Die modifizierte JAR-Datei kann dann mit Benutzer gelieferten Hauptklasse Konfiguration in Hadoop verwendet werden, wie in dem folgenden Beispielbefehl gezeigt,

$ hadoop jar hello.jar hello.HelloWorld

+0

Hallo, ich habe eine sehr dummes Problem, das ich in Lager bekam. Ich habe eine einfache (nur Hallo Welt drucken) .class-Datei lokal, die ich es in .jar konvertieren und lokal ohne Probleme ausführen kann. Aber wenn ich es in meinen Hadoop-Cluster stecke, sehe ich mich mit einem dummen Bug konfrontiert: JAR existiert nicht oder ist keine normale Datei: /usr/reihan/test.jar Ich sollte auch erwähnen, dass ich Hadoop-Built-In laufen lassen kann. Beispiele wie Wordcount ohne Problem, aber wenn ich mein eigenes Glas laufen lassen möchte, stelle ich mich mit diesem Problem. irgendeine Idee? –

+0

Überprüfen Sie zunächst, ob Sie die JAR-Datei ordnungsgemäß generieren, und empfehlen Sie, sie mit eclipse zu generieren. Versuchen Sie zweitens, den vollständigen Pfad Ihrer JAR-Datei zu verwenden und versuchen Sie vorher, ob sie bereits in HDFS gespeichert ist. Versuchen Sie drittens, die Hauptklasse in Ihrer Manifestdatei festzulegen, wenn sie nicht vorhanden ist. Zuletzt, wenn es nicht funktioniert, schreibe in einen Kommentar den Befehl, den du benutzt, und einen Link zu deiner JAR-Datei, damit ich einen Blick darauf werfen kann. –

Verwandte Themen