2016-05-15 1 views
1

Je suis en topologie de tempête « pyleus --verbose local xyz_topology.jar » en utilisant storm-1.0.0, pyleus-0.3.0, centos-6.6 et obtenir l'erreurIRichBolt Erreur lors de la topologie en cours d'exécution sur la tempête et pyleus-1.0.0 0.3.0

Exception in thread "main" java.lang.NoClassDefFoundError: backtype/storm/topology/IRichBolt

Running: java -client -Ddaemon.name= -Dstorm.options= -Dstorm.home=/usr/local/apache-storm-1.0.0 
-Dstorm.log.dir=/usr/local/apache-storm-1.0.0/logs -Djava.library.path=/usr/local/  
lib:/opt/local/lib:/usr/lib -Dstorm.conf.file= -cp /usr/local/apache-storm-1.0.0/lib/asm-5.0.3.jar: 
/usr/local/apache-storm-1.0.0/lib/clojure-1.7.0.jar:/usr/local/apache-storm-1.0.0/lib/disruptor-3.3.2.jar: 
/usr/local/apache-storm-1.0.0/lib/kryo-3.0.3.jar: 
/usr/local/apache-storm-1.0.0/lib/log4j-api-2.1.jar:/usr/local/apache-storm-1.0.0/lib/log4j-core-2.1.jar  
:/usr/local/apache-storm-1.0.0/lib/log4j-over-slf4j-1.6.6.jar: 
/usr/local/apache-storm-1.0.0/lib/log4j-slf4j-impl-2.1.jar:/usr/local/apache-storm-1.0.0/lib/minlog-1.3.0.jar: 
/usr/local/apache-storm-1.0.0/lib/objenesis-2.1.jar:/usr/local/apache-storm-1.0.0/lib/reflectasm-1.10.1.jar: 
/usr/local/apache-storm-1.0.0/lib/servlet-api-2.5.jar:/usr/local/apache-storm-1.0.0/lib/slf4j-api-1.7.7.jar: 
/usr/local/apache-storm-1.0.0/lib/storm-core-1.0.0.jar: 
/usr/local/apache-storm-1.0.0/lib/storm-rename-hack-1.0.0.jar:xyzTopology.jar: 
/usr/local/storm/conf:/usr/local/apache-storm-1.0.0/bin 
-Dstorm.jar=xyz_topology.jar com.yelp.pyleus.PyleusTopologyBuilder --local 
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 
pyleus local: error: [StormError] Storm command failed. Run with --verbose for more info. 

La même topologie a bien fonctionné et sans aucune erreur lors de l'utilisation de l'ancienne version de storm-0.10.0 and pyleus-0.3.0.

I regardé la tempête 0.10.0 et 1.0.0 orage documents et a constaté que dans la tempête-1.0.0

(a) la structure d'emballage a été modifié et

(b) la classe IRichBolt n'est pas présentée et à la place, il y a deux nouvelles classes - BaseStatefulBoltExecutor et BasicBoltExecutor - qui implémentent l'interface IRichBolt.

Il semble que la nouvelle version storm-1.0.0 ne peut pas fonctionner avec pyleus-0.3.0 comme c'était le cas avec l'ancienne version storm-0.10.0.

Quelle serait la meilleure solution pour résoudre le problème et permettre d'exécuter la topologie sur storm-1.0.0 et pyleus-0.3.0?

+0

J'ai essayé de le fixer comme suit: a obtenu le code source de pyleus de GitHub, importé tous les fichiers, y compris le fichier pom de com \ yelp \ pyleus dans Eclipse, les fichiers java ont changé backtype.storm.topology en org.apache.storm.topology, compilé les nouveaux fichiers * .class, décompressé pyleus_base.jar, remplacé les anciens fichiers * .class par les nouveaux compilés dans Eclipse , retourné à pyleus_base.jar, placé dans le module pyleus, soumis une topologie de tempête et obtenu une autre erreur, liée à la partie de kafka du module pyleus. –

Répondre

1

Storm 1.0.0 inclut un refactoring majeur en ce qui concerne les noms de paquets. Tous les paquets backtype/* ont été remplacés par org/apache/storm. Ainsi, vous devez recompiler votre topologie à l'aide de Storm 1.0.0 (y compris un changement de code, c.-à-d. En utilisant différents import pour s'aligner sur la nouvelle structure de paquetage).

Comme alternative, vous pouvez activer la rétrocompatibilité dans votre cluster Storm (voir https://storm.apache.org/releases/1.0.0/index.html)

NOTE 

In the latest version, the class packages have been changed from "backtype.storm" to "org.apache.storm" so the topology code compiled with older version won't run on the Storm 1.0.0 just like that. Backward compatibility is available through following configuration

client.jartransformer.class: "org.apache.storm.hack.StormShadeTransformer"

You need to add the above config in storm installation if you want to run the code compiled with older versions of storm. The config should be added in the machine you use to submit your topologies.

Refer to https://issues.apache.org/jira/browse/STORM-1202 for more details.

+0

Merci Matthias pour la réponse. J'ai regardé les liens fournis (https://storm.apache.org/releases/1.0.0/index.html et https://issues.apache.org/jira/browse/STORM-1202) mais toujours pas clair. Pourriez-vous s'il vous plaît expliquer ce que cela signifie "ajouter la configuration ci-dessus dans l'installation de tempête", ce qui doit exactement être fait pour résoudre le problème? Merci d'avance –

+0

Ajoutez la configuration au fichier conf/storm.yaml. –