Ich habe ein Spark-Scala-Programm, das ein Glas lädt, schrieb ich in Java. Von diesem Jar wird eine statische Funktion aufgerufen, die versucht, ein serialisiertes Objekt aus einer Datei (Pattern.class
) zu lesen, aber eine java.lang.ClassNotFoundException
auslöst. Die Ausführung des Funke-Programms lokal funktioniert, aber auf den Cluster-Arbeitern nicht. Es ist besonders merkwürdig, denn bevor ich versuche, aus der Datei zu lesen, instanziiere ich ein Pattern
Objekt und es gibt keine Probleme.java.lang.ClassNotFoundException beim Ausführen von Programm auf Funken-Cluster
Ich bin sicher, dass die Pattern
Objekte, die ich in der Datei schrieb, die gleichen sind wie die Pattern
Objekte, die ich versuche zu lesen.
Ich habe das Glas in der Slave-Maschine überprüft und die Pattern
Klasse ist da.
Hat jemand eine Idee, was das Problem sein könnte? Ich kann mehr Details hinzufügen, wenn es benötigt wird.
Dies ist die Klasse Pattern
public class Pattern implements Serializable {
private static final long serialVersionUID = 588249593084959064L;
public static enum RelationPatternType {NONE, LEFT, RIGHT, BOTH};
RelationPatternType type;
String entity;
String pattern;
List<Token> tokens;
Relation relation = null;
public Pattern(RelationPatternType type, String entity, List<Token> tokens, Relation relation) {
this.type = type;
this.entity = entity;
this.tokens = tokens;
this.relation = relation;
if (this.tokens != null)
this.pattern = StringUtils.join(" ", this.tokens.toString());
}
}
ich die Datei aus dem S3 lese die folgende Art und Weise:
AmazonS3 s3Client = new AmazonS3Client(credentials);
S3Object confidentPatternsObject = s3Client.getObject(new GetObjectRequest("xxx","confidentPatterns"));
objectData = confidentPatternsObject.getObjectContent();
ois = new ObjectInputStream(objectData);
confidentPatterns = (Map<Pattern, Tuple2<Integer, Integer>>) ois.readObject();
LE: überprüfte ich die Classpath zur Laufzeit und der Pfad zu dem Glas war nicht da. Ich habe es für die Executoren hinzugefügt, aber ich habe immer noch das gleiche Problem. Ich glaube nicht, dass es das war, da ich die Musterklasse innerhalb des Jar habe, die die readObject-Funktion aufruft.
Haben Sie Ihre Klasse im Klassenpfad im Falle eines Clusters? –
Muster ist deine eigene Klasse oder? es ist nicht der aus dem JDK? –
Es ist in dem Glas, das im Cluster ausgeführt wird, also nehme ich an, dass es Zugriff darauf haben sollte – Tomy