Frage

Ich bin eine hadoop Karte zu verändern -. Arbeit reduzieren, dass derzeit kompiliert und läuft gut ohne meine Änderungen

Im Rahmen der Arbeit, werde ich jetzt bis S3 werden Verbinden einer Datei zu liefern.

Ich entwickelte eine (sehr einfach) s3Connector Klasse, getestet und es lief in Eclipse, dann ging es in meinen reduzieren Job einzuzuhaken. Um den Job in Hadoop zu laufen, ich habe das Projekt als JAR-Datei exportieren, dann von hadoop nennen. Die JAR-Datei scheint problemlos von Eclipse zu kompilieren und zu exportieren, aber wenn ich es in hadoop laufen, erhalte ich eine java.lang.VerifyError Ausnahme.

java.lang.VerifyError: (class: com/extrabux/services/S3Connector, method: 
connectToS3 signature: ()V) Incompatible argument to function

Einige andere Beiträge erwähnen, dass es möglicherweise jar Versionsabhängigkeiten sein, die in Konflikt sind, aber in meinem Eclipse Build-Pfad, habe ich alle aktuellen JAR-Dateien für die angegebene Libs und schob sie an die Spitze des Build-Pfad um.

Hier geht es um so einfach ist, wie ich es isolieren kann bis auf:

import org.jets3t.service.impl.rest.httpclient.RestS3Service;
import org.jets3t.service.security.AWSCredentials;

public class S3Connector {

protected RestS3Service s3Service;
protected AWSCredentials awsCredentials;


public S3Connector()
{
    this.awsCredentials= new AWSCredentials("my secret 1", "my secret 2");
}


public void connectToS3() throws Exception
{
    this.s3Service = new RestS3Service(this.awsCredentials);
}  

}

Auch das einfache Klasse sterben .. Same Nachricht. Sobald ich die AWS-Anmeldeinformationen im Konstruktor und RestS3Service Kommentar aus, verschwindet das Problem. Im Grunde genommen, ich denke, es ist eine Art Bibliothek Export Problem aus Eclipse, aber nicht sicher, wie es zu finden.

War es hilfreich?

Lösung

Figured dies. Es gab eine alte Version des jets3t Glas, die in der hadoop war lib dir

die hadoop Befehlszeilenskript Schleifen alle Gläser in dem lib dir über und physisch fügt sie den Classpath auf dem letzten exec'ed Befehlszeilenbefehl, dass es aufbaut. Diese Befehlszeile Classpath des 0.6.0 Gefäß wurde das Überschreiben der guten 0.8.0 jar, dass ich in meinem JAR-Datei wurde exportiert. Da die 0.6.0 Version entspricht nicht den angegebenen Konstruktor für RestS3Service hat, wurde die java.lang.VerifyError geworfen zu werden. Durch das Entfernen der 0.6.0 lib von Hadoop, war alles gut.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top