我现在正尝试对风暴1.0.1进行一些测试。我使用了使用storm 0.9.5编译的拓扑并使用向后兼容模式client.jartransformer.class: "org.apache.storm.hack.StormShadeTransformer"
提交它,但是我的spout中出现了以下异常:
> java.lang.NoSuchMethodError:
> org.apache.storm.spout.MultiScheme.deserialize([B)Ljava/lang/Iterable;
> at storm.kafka.KafkaUtils.generateTuples(KafkaUtils.java:209) ~[stormjar.jar:?]
> at storm.kafka.PartitionManager.next(PartitionManager.java:131)
> ~[stormjar.jar:?]
> at storm.kafka.KafkaSpout.nextTuple(KafkaSpout.java:141) ~[stormjar.jar:?]
> at org.apache.storm.daemon.executor$fn__7885$fn__7900$fn__7931.invoke(executor.clj:645)
> ~[storm-core-1.0.1.jar:1.0.1]
> at org.apache.storm.util$async_loop$fn__625.invoke(util.clj:484)
> [storm-core-1.0.1.jar:1.0.1]
> at clojure.lang.AFn.run(AFn.java:22) [clojure-1.7.0.jar:?]
> at java.lang.Thread.run(Thread.java:745) [?:1.7.0_71]
知道如何解决这个问题吗?
谢谢!
答案 0 :(得分:2)
在0.9.5 storm-core中,MultiScheme.class的方法是
public Iterable<List<Object>> deserialize(byte[] ser);
但是在1.0.1 storm-core中,MultiScheme.class的方法是
public Iterable<List<Object>> deserialize(ByteBuffer ser);
如果仔细观察,反序列化方法是重写,参数byte []变为ByteBuffer。 所以,风暴抛出NoSuchMethodError。 你应该用风暴外部风暴kafka-1.0.1.jar重新包装你的程序 :)