迁移到1.0.0后,Apache Storm中的java.lang.ClassNotFoundException

时间:2016-04-15 16:36:06

标签: java maven apache-storm classnotfoundexception

我尝试将简单的 Trident DRPC拓扑迁移到Apache Storm 1.0.0(从0.10.0开始)并在本地内存模式下进行测试。这是一个非常简单的拓扑,包含1个螺栓,因此只需将backtype.stormstorm.trident替换为org.apache.stormorg.apache.storm.trident即可进行迁移。

不幸的是,我开始遇到错误(可能有不同的拓扑结构的不同缺失类):

java.lang.RuntimeException: java.lang.ClassNotFoundException: org.apache.storm.trident.partition.IdentityGrouping

报告特定拓扑的问题太奇怪了,所以我用storm-starter拓扑重现了这个问题。因为,我对内存中集群的测试感兴趣,我选择了ExclamationTopology

> cd storm/examples/storm-starter
> mvn clean install -DskipTests=true
> mvn exec:java -Dstorm.topology=storm.starter.ExclamationTopology -DskipTests=true

上述命令启动了本地群集,但在提交拓扑后,它也以RuntimeException结束:

8632 [Thread-11] ERROR o.a.s.d.worker - Error on initialization of server mk-worker
java.lang.RuntimeException: java.lang.ClassNotFoundException: org.apache.storm.testing.TestWordSpout
  at org.apache.storm.utils.Utils.javaDeserialize(Utils.java:181) ~[storm-core-1.0.0.jar:1.0.0]
  at org.apache.storm.utils.Utils.getSetComponentObject(Utils.java:430) ~[storm-core-1.0.0.jar:1.0.0]
  at org.apache.storm.daemon.task$get_task_object.invoke(task.clj:74) ~[storm-core-1.0.0.jar:1.0.0]
  at org.apache.storm.daemon.task$mk_task_data$fn__7593.invoke(task.clj:177) ~[storm-core-1.0.0.jar:1.0.0]
  at org.apache.storm.util$assoc_apply_self.invoke(util.clj:930) ~[storm-core-1.0.0.jar:1.0.0]
  at org.apache.storm.daemon.task$mk_task_data.invoke(task.clj:170) ~[storm-core-1.0.0.jar:1.0.0]
  at org.apache.storm.daemon.task$mk_task.invoke(task.clj:181) ~[storm-core-1.0.0.jar:1.0.0]
  at org.apache.storm.daemon.executor$mk_executor$fn__7812.invoke(executor.clj:371) ~[storm-core-1.0.0.jar:1.0.0]
  at clojure.core$map$fn__4553.invoke(core.clj:2622) ~[clojure-1.7.0.jar:?]
  at clojure.lang.LazySeq.sval(LazySeq.java:40) ~[clojure-1.7.0.jar:?]

....

Caused by: java.lang.ClassNotFoundException: org.apache.storm.testing.TestWordSpout
at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[?:1.8.0_77]
  at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_77]
  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) ~[?:1.8.0_77]
  at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_77]
  at java.lang.Class.forName0(Native Method) ~[?:1.8.0_77]
  at java.lang.Class.forName(Class.java:348) ~[?:1.8.0_77]
  at org.apache.storm.shade.org.apache.commons.io.input.ClassLoaderObjectInputStream.resolveClass(ClassLoaderObjectInputStream.java:68) ~[storm-core-1.0.0.jar:1.0.0]

....

旧版本已经报告了类似的问题,但没有明确的解决方案或问题太过一般。

当然,我还检查了依赖树,并且包含了storm-core,所以我认为它与序列化问题和我在本地模式下执行拓扑的方式有关。

有任何建议吗?我在Apache Maven 14.04上使用Java 3.3.9和Ubuntu 1.8.0_77。这是我的pom.xml

0 个答案:

没有答案