【发布时间】:2016-09-11 13:52:28
【问题描述】:
我正在使用storm-1.0.0, pyleus-0.3.0, centos-6.6 运行风暴拓扑“pyleus --verbose local xyz_topology.jar”并收到错误
线程“主”java.lang.NoClassDefFoundError 中的异常: 回型/风暴/拓扑/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.
使用旧版本的storm-0.10.0 and pyleus-0.3.0 时,相同的拓扑运行良好且没有任何错误。
我查看了storm-0.10.0 和storm-1.0.0 文档,发现在storm-1.0.0 中
(a) 包结构已经改变和
(b) IRichBolt 类没有出现,取而代之的是两个新类——BaseStatefulBoltExecutor 和 BasicBoltExecutor——它们实现了 IRichBolt 接口。
似乎新的storm-1.0.0 版本无法与pyleus-0.3.0 一起使用,就像旧的storm-0.10.0 版本一样。
解决问题并允许在 storm-1.0.0 和 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 模块部分有关。
标签: python apache-storm topology pyleus