似乎NoClassDefFoundError
很容易修复,但我似乎无法解决这个问题。
我在word_count example上使用了pyleus。我可以使用:
构建pyleaus build word_count/pyleus_topology.yaml
然后我尝试运行本地(或者即使我尝试提交,我也会遇到同样的错误):
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
这里让我感到困惑的是,如果你滚动我的错误日志,它看起来好像所有风暴库都包含在类路径中。我在这里错过了什么?我使用的是Storm 1.0.1,pyleus 0.3.0,Java 1.8,Python 2.7。
答案 0 :(得分:0)
我想我会回答我自己的问题。基于我在github.com和javadocs中看到的...我相信pyleus不支持1.0.1。 javadocs表明,在之前的修订版中,IRichBolt位于backtype.storm.topology
,但现在它存在于org.apache.storm.topology
中。谁知道还有什么是不相容的。
所以我想现在,运行一个旧版本的Storm(我只看到0.9.4兼容的引用,所以也许0.9.6也可以)。我确实看到有一个开放拉取请求正在处理0.10.0,所以我想在支持1.0.1之前可能需要一段时间。
答案 1 :(得分:0)
你是对的,我得到了类似的问题,在IRichBolt Error when running topology on storm-1.0.0 and pyleus-0.3.0报道 我尝试修复如下:从GitHub获取pyleus源代码,将包括pom文件的所有文件从com \ yelp \ pyleus导入Eclipse,在java文件中将backtype.storm.topology更改为org.apache.storm.topology,编译新的* .class文件,解压缩的pyleus_base.jar,用Eclipse中新编译的旧* .class文件替换,压缩回pyleus_base.jar,将其放在pyleus模块中,提交风暴拓扑并得到另一个错误,与kafka的部分有关pyleus模块。我在pyleus_base.jar中找到了另一套kafka的* .class文件,这些文件也需要修复,而且似乎需要做太多的工作才能解决问题。我还是没有解决它。