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