【问题标题】:Using pyleus: NoClassDefFoundError: backtype/storm/topology/IRichBolt [duplicate]使用 pyleus:NoClassDefFoundError:backtype/storm/topology/IRichBolt [重复]
【发布时间】:2016-06-05 03:20:37
【问题描述】:

似乎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 库都包含在类路径中。我在这里想念什么?我正在使用 Storm 1.0.1、pyleus 0.3.0、Java 1.8、Python 2.7。

【问题讨论】:

  • 有谁知道 pyleus 是否适用于 Storm 1.0.1?
  • @JarrodRoberson 将其标记为对 NoClassDefFoundError 是什么的非常笼统的解释的重复,坦率地说,这对您来说是一个过度。没有一个答案能很好地快速回答这个问题,即为什么我的问题在没有大量挖掘的情况下就存在。我相信其他人会遇到这种情况,因为 pyleus 不支持较新版本的 Storm 并不明显。
  • 该错误的每个实例的相同原因以及有关此错误的每个问题的相同答案,将缺少的类放在类路径中,如何针对您的特定情况执行此操作非常本地化,什么版本无关紧要,不会改变这个异常发生的原因或如何修复它。
  • @JarrodRoberson 当这不是一个真正的 java 编程问题(即使它是一个 java 错误)时,我标记这个 java 的错误。我认为 python 开发人员没有理由必须学习 Java 的来龙去脉并追踪这个问题,而且我相信其他人会碰到它。

标签: python apache-storm pyleus


【解决方案1】:

我想我会回答我自己的问题。根据我在 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。

【讨论】:

    【解决方案2】:

    你是对的,我遇到了类似的问题,报告于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模块中,提交storm topology又报错,和kafka的部分有关pyleus 模块。我在 pyleus_base.jar 中发现了另一组 kafka 的 *.class 文件,这些文件也需要修复,似乎需要做太多事情才能解决这个问题。我还没有修复它。

    【讨论】:

    • 看起来流解析的最新(前沿)版本可以作为替代方案,尽管我还没有尝试过。 pip install --pre streamparse==3.0.0.dev3
    • 我想我会跟进,我能够在 Storm 1.0.1 工作的情况下获得流解析(尽管我确实必须从 github 应用一些 3.0.0.dev3 中还没有的差异) .
    猜你喜欢
    • 2016-03-23
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-11
    • 1970-01-01
    • 1970-01-01
    • 2016-09-11
    相关资源
    最近更新 更多