java.lang.NoSuchMethodError:org.apache.storm.spout.MultiScheme.deserialize([B] Ljava / lang / Iterable;

时间:2016-06-08 21:49:40

标签: apache-storm

我现在正尝试对风暴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]

知道如何解决这个问题吗?

谢谢!

1 个答案:

答案 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重新包装你的程序  :)