“我在奔跑” pyleus --verbose local xyz_topology.jar
“使用 storm-1.0.0, pyleus-0.3.0, centos-6.6
得到错误
线程“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.
使用旧版本的时,相同的拓扑运行良好,没有任何错误 storm-0.10.0 and pyleus-0.3.0
.
我查看了storm-0.10.0和storm-1.0.0文档,在storm-1.0.0中发现了这一点
(a) 包结构已更改并且
(b) 没有提供irichbolt类,而是有两个新类实现了irichbolt接口:basestatefulboltexecutor和basicboltexecutor。
好像是新的 storm-1.0.0
release无法使用 pyleus-0.3.0
就像以前一样 storm-0.10.0
版本。
解决问题并允许在其上运行拓扑的最佳解决方案是什么 storm-1.0.0
以及 pyleus-0.3.0
?
1条答案
按热度按时间d7v8vwbk1#
Storm1.0.0包含了一个关于包名的主要重构。所有程序包
backtype/*
被替换为org/apache/storm
. 因此,您需要使用Storm1.0.0重新编译拓扑(包括一些代码更改;例如,使用不同的import
以与新的包结构对齐)。或者,您可以在storm集群中启用向后兼容性(请参阅https://storm.apache.org/releases/1.0.0/index.html)
在最新版本中,类包已从“backtype.storm”更改为“org.apache.storm”,因此使用旧版本编译的拓扑代码不会像那样在Storm1.0.0上运行。向后兼容性可通过以下配置获得
client.jartransformer.class:“org.apache.storm.hack.stormshadetransformer”
如果要运行使用旧版本的storm编译的代码,需要在storm安装中添加上述配置。应该将配置添加到用于提交拓扑的计算机中。
参考https://issues.apache.org/jira/browse/storm-1202 更多细节。