2016-05-13 7 views
0

Scheint wie ein NoClassDefFoundError wäre eine einfache Sache zu beheben, aber ich kann nicht scheinen, dies herauszufinden.Verwenden von pyleus: NoClassDefFoundError: BackType/Sturm/Topologie/IRichBolt

Ich benutze Pyleus auf der word_count example. Ich bin zu bauen Lage mit:

pyleaus build word_count/pyleus_topology.yaml 

Dann versuche ich, lokal auszuführen (oder auch wenn ich versuche, einreichen, erhalte ich den gleichen Fehler):

pyleus local --debug word_count.jar 

Running: /mypath/jre/bin/java -client -Ddaemon.name= -Dstorm.options= -Dstorm.home=/mypath/storm -Dstorm.log.dir=/mypath/storm/logs -Djava.library.path=/mypath/jre/lib/ -Dstorm.conf.file= -cp /mypath/storm/lib/storm-core-1.0.1.jar:/mypath/storm/lib/asm-5.0.3.jar:/mypath/storm/lib/log4j-over-slf4j-1.6.6.jar:/mypath/storm/lib/log4j-slf4j-impl-2.1.jar:/mypath/storm/lib/log4j-core-2.1.jar:/mypath/storm/lib/kryo-3.0.3.jar:/mypath/storm/lib/storm-rename-hack-1.0.1.jar:/mypath/storm/lib/objenesis-2.1.jar:/mypath/storm/lib/reflectasm-1.10.1.jar:/mypath/storm/lib/log4j-api-2.1.jar:/mypath/storm/lib/minlog-1.3.0.jar:/mypath/storm/lib/slf4j-api-1.7.7.jar:/mypath/storm/lib/clojure-1.7.0.jar:/mypath/storm/lib/servlet-api-2.5.jar:/mypath/storm/lib/disruptor-3.3.2.jar:word_count.jar:/mypath/storm/conf:/mypath/storm/bin -Dstorm.jar=word_count.jar com.yelp.pyleus.PyleusTopologyBuilder --local --debug 
Error: A JNI error has occurred, please check your installation and try again 
Exception in thread "main" java.lang.NoClassDefFoundError: backtype/storm/topology/IRichBolt 
     at java.lang.Class.getDeclaredMethods0(Native Method) 
     at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) 
     at java.lang.Class.privateGetMethodRecursive(Class.java:3048) 
     at java.lang.Class.getMethod0(Class.java:3018) 
     at java.lang.Class.getMethod(Class.java:1784) 
     at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544) 
     at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526) 
Caused by: java.lang.ClassNotFoundException: backtype.storm.topology.IRichBolt 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
     ... 7 more 

Was mir verwirrend ist hier, dass Es sieht so aus, als ob alle storm libs im Klassenpfad enthalten sind, wenn Sie in meinem Fehlerprotokoll blättern. Was fehlt mir hier? Ich benutze Storm 1.0.1, pyleus 0.3.0, Java 1.8, Python 2.7.

+0

Weiß jemand, ob pyleus für Storm 1.0.1 funktioniert? – woot

+0

@JarrodRoberson Dies als eine dup von einer sehr generischen Erklärung dessen, was NoClassDefFoundError ist, zu markieren, ist ehrlich gesagt eine Überforderung Ihrerseits. Keine der Antworten passt gut, um schnell die Frage zu beantworten, warum mein Problem ohne viel zu graben da ist. Ich bin sicher, dass andere darauf stoßen werden, weil es nicht offensichtlich ist, dass pyleus die neueren Versionen von Storm nicht unterstützt. – woot

+0

gleichen Grund für jede Instanz dieses Fehlers und die gleiche Antwort für jede Frage zu diesem Fehler, setzen Sie die fehlende Klasse auf den Klassenpfad, * wie Sie das für Ihre besondere Situation tun ist extrem lokalisiert *, welche Version von was auch immer irrelevant ist, tut Ändern Sie nicht den Grund für diese Ausnahme oder wie Sie sie beheben können. –

Antwort

0

Ich denke, ich werde meine eigene Frage beantworten. Basierend auf dem, was ich in github.com und den Javadocs sehe ... glaube ich, dass pyleus 1.0.1 nicht unterstützt. Die Javadocs zeigen, dass in früheren Revisionen IRichBolt in backtype.storm.topology war, jetzt aber existiert es in org.apache.storm.topology. Wer weiß, was sonst unvereinbar ist.

Also ich denke mal, eine ältere Version von Storm laufen (ich sah nur eine Referenz zu 0.9.4 kompatibel, so vielleicht 0.9.6 würde auch funktionieren). Ich habe gesehen, dass es eine offene Pull-Anfrage für 0.10.0 gibt, an der gearbeitet wird, also denke ich, dass es eine Weile dauern könnte, bevor 1.0.1 unterstützt wird.

0

Sie haben Recht, und ich bekam das ähnliche Problem, berichten bei IRichBolt Error when running topology on storm-1.0.0 and pyleus-0.3.0 Ich habe versucht, es zu beheben, wie folgt: wurden die pyleus Quellcode von GitHub, importierte alle Dateien einschließlich pom-Datei von com \ Jaulen \ pyleus in Eclipse, in Java-Dateien geändert backtype.storm.topology in org.apache.storm.topology, kompilierte neue * .class-Dateien, entpackt pyleus_base.jar, ersetzt alte * .class-Dateien mit dem neu in Eclipse kompiliert, gezippt zurück zu pyleus_base.jar, platziert es in der Pyleus-Modul, Sturm Topologie vorgelegt und bekam einen anderen Fehler, bezogen auf Kafkas Anteil von Pyleus-Modul. Ich habe in der pyleus_base.jar ein weiteres Set von kafkas * .class-Dateien gefunden, die ebenfalls korrigiert werden müssen und es scheint zu viel zu tun, um das Problem zu lösen. Ich habe es immer noch nicht behoben.

+0

Es sieht so aus, als ob die neueste (neueste) Version von streamparse als Alternative funktionieren könnte, obwohl ich es noch nicht ausprobiert habe. 'pip install --pre streamparse == 3.0.0.dev3' – woot

+0

Dachte ich würde nachverfolgen, dass ich in der Lage war, streamparse mit storm 1.0.1 funktionierend zu bekommen (obwohl ich ein paar diffs von github anwenden musste, die nicht sind in 3.0.0.dev3 noch). – woot