这是一个奇怪的问题,我希望有人遇到并克服。
我有一个相对简单的拓扑:
Spout -> BoltA -> BoltB
-> BoltC
如果我使用螺栓A和B,它可以工作。 A和C也有效。启用这三个虽然给了我这个:
16:05:20.627 [main] WARN backtype.storm.daemon.nimbus - Topology submission exception. (topology name='traffic') #<RuntimeException java.lang.RuntimeException: java.lang.ClassNotFoundException: backtype.storm.daemon.nimbus$normalize_conf$get_merged_conf_val__3916$fn__3917>
16:05:20.634 [main] ERROR o.a.zookeeper.server.NIOServerCnxn - Thread Thread[main,5,main] died
java.lang.RuntimeException: java.lang.ClassNotFoundException: backtype.storm.daemon.nimbus$normalize_conf$get_merged_conf_val__3916$fn__3917
at backtype.storm.utils.Utils.deserialize(Utils.java:88) ~[storm-core-0.9.1-incubating.jar:0.9.1-incubating]
at backtype.storm.daemon.nimbus$read_storm_conf.invoke(nimbus.clj:89) ~[storm-core-0.9.1-incubating.jar:0.9.1-incubating]
at backtype.storm.daemon.nimbus$start_storm.invoke(nimbus.clj:724) ~[storm-core-0.9.1-incubating.jar:0.9.1-incubating]
at backtype.storm.daemon.nimbus$eval3974$exec_fn__1459__auto__$reify__3987.submitTopologyWithOpts(nimbus.clj:962) ~[na:na]
at backtype.storm.daemon.nimbus$eval3974$exec_fn__1459__auto__$reify__3987.submitTopology(nimbus.clj:971) ~[na:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_55]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_55]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_55]
我使用以下代码在本地运行它:
LocalCluster cluster = new LocalCluster();
cluster.submitTopology(topoName, conf, buildTopology(source, service));
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
cluster.killTopology(topoName);
cluster.shutdown();
我正在对抗storm-core-0.9.1-incubating.jar
我所能找到的只是this discussion关于它&#34;是一个类路径问题&#34;。事实上它只发生在添加第三个螺栓之后,但它并不重要,确实让我感到困惑。一旦它具有足够复杂的拓扑结构,Storm会做些什么吗?在3个螺栓或4个部件上踢?
嗯,它更奇怪了。找到someone with the same problem后,我尝试了他们的解决方案并添加到我的logback.xml:
<logger name="backtype.storm.daemon.nimbus" level="INFO" />
解决了这个问题。更高的值(WARN,ERROR)将它带回来。较低(DEBUG)很好。删除此行并将根记录器设置为DEBUG可以解决问题,所以我真的很困惑。如果代码路径中的某些内容取决于logger.isInfoEnabled()
,那么rootLogger=INFO
和backtype.storm.daemon.nimbus=INFO
的行为是否相同?