Using pyleus: NoClassDefFoundError: backtype/storm/topology/IRichBolt
Using pyleus: NoClassDefFoundError: backtype/storm/topology/IRichBolt
似乎 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。
我想我会回答我自己的问题。根据我在 github.com 和 javadocs 中看到的...我相信 pyleus 不支持 1.0.1。 javadoc 显示在以前的修订版中,IRichBolt 在 backtype.storm.topology
中,但现在它存在于 org.apache.storm.topology
中。谁知道还有什么不相容的。
所以我想现在 运行 旧版本的 Storm(我只看到 0.9.4 兼容的参考,所以 0.9.6 可能也可以)。我确实看到有一个正在处理 0.10.0 的公开拉取请求,所以我想可能需要一段时间才能支持 1.0.1。
你是对的,我遇到了类似的问题,已在 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 模块中,提交了风暴拓扑并得到另一个错误,与 pyleus 模块的 kafka 部分有关。我在 pyleus_base.jar 中发现了另一组 kafka 的 *.class 文件,这些文件也需要修复,似乎需要做太多的工作才能解决这个问题。我还是没修好。
似乎 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。
我想我会回答我自己的问题。根据我在 github.com 和 javadocs 中看到的...我相信 pyleus 不支持 1.0.1。 javadoc 显示在以前的修订版中,IRichBolt 在 backtype.storm.topology
中,但现在它存在于 org.apache.storm.topology
中。谁知道还有什么不相容的。
所以我想现在 运行 旧版本的 Storm(我只看到 0.9.4 兼容的参考,所以 0.9.6 可能也可以)。我确实看到有一个正在处理 0.10.0 的公开拉取请求,所以我想可能需要一段时间才能支持 1.0.1。
你是对的,我遇到了类似的问题,已在 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 模块中,提交了风暴拓扑并得到另一个错误,与 pyleus 模块的 kafka 部分有关。我在 pyleus_base.jar 中发现了另一组 kafka 的 *.class 文件,这些文件也需要修复,似乎需要做太多的工作才能解决这个问题。我还是没修好。