0

I have a storm application & a custom POJO (Alerts) class in it. I have added this class to storm configuration object. Alerts class is implementing java.io.Serailable interface & it also has serialVersionUID.

conf.registerSerialization(Alerts.class);

but when executing in storm cluster I am getting an error (ClassNotFoundException). I cleared zookeeper & storm data/cache directories but still this error is occurring. I extracted the jar & checked for Alerts class after building the jar & it's there inside the jar. It would be helpful if you guys can give me some suggestions to solve this issue.

Stacktrace:

2015-11-07T02:13:57.130+0530 b.s.d.worker [ERROR] Error on initialization of server mk-worker
java.lang.RuntimeException: java.lang.ClassNotFoundException: com.example.testing.storm.models.Alerts
    at backtype.storm.serialization.SerializationFactory.getKryo(SerializationFactory.java:100) ~[storm-core-0.9.4.jar:0.9.4]
    at backtype.storm.serialization.KryoValuesDeserializer.<init>(KryoValuesDeserializer.java:33) ~[storm-core-0.9.4.jar:0.9.4]
    at backtype.storm.serialization.KryoTupleDeserializer.<init>(KryoTupleDeserializer.java:39) ~[storm-core-0.9.4.jar:0.9.4]
    at backtype.storm.daemon.executor$mk_executor_data$fn__4559.invoke(executor.clj:214) ~[storm-core-0.9.4.jar:0.9.4]
    at backtype.storm.util$assoc_apply_self.invoke(util.clj:850) ~[storm-core-0.9.4.jar:0.9.4]
    at backtype.storm.daemon.executor$mk_executor_data.invoke(executor.clj:214) ~[storm-core-0.9.4.jar:0.9.4]
    at backtype.storm.daemon.executor$mk_executor.invoke(executor.clj:319) ~[storm-core-0.9.4.jar:0.9.4]
    at backtype.storm.daemon.worker$fn__5033$exec_fn__1754__auto____5034$iter__5039__5043$fn__5044.invoke(worker.clj:422) ~[storm-core-0.9.4.jar:0.9.4]
    at clojure.lang.LazySeq.sval(LazySeq.java:42) ~[clojure-1.5.1.jar:na]
    at clojure.lang.LazySeq.seq(LazySeq.java:60) ~[clojure-1.5.1.jar:na]
    at clojure.lang.RT.seq(RT.java:484) ~[clojure-1.5.1.jar:na]
    at clojure.core$seq.invoke(core.clj:133) ~[clojure-1.5.1.jar:na]
    at clojure.core$dorun.invoke(core.clj:2780) ~[clojure-1.5.1.jar:na]
    at clojure.core$doall.invoke(core.clj:2796) ~[clojure-1.5.1.jar:na]
    at backtype.storm.daemon.worker$fn__5033$exec_fn__1754__auto____5034.invoke(worker.clj:422) ~[storm-core-0.9.4.jar:0.9.4]
    at clojure.lang.AFn.applyToHelper(AFn.java:185) [clojure-1.5.1.jar:na]
    at clojure.lang.AFn.applyTo(AFn.java:151) [clojure-1.5.1.jar:na]
    at clojure.core$apply.invoke(core.clj:617) ~[clojure-1.5.1.jar:na]
    at backtype.storm.daemon.worker$fn__5033$mk_worker__5089.doInvoke(worker.clj:389) [storm-core-0.9.4.jar:0.9.4]
    at clojure.lang.RestFn.invoke(RestFn.java:512) [clojure-1.5.1.jar:na]
    at backtype.storm.daemon.worker$_main.invoke(worker.clj:500) [storm-core-0.9.4.jar:0.9.4]
    at clojure.lang.AFn.applyToHelper(AFn.java:172) [clojure-1.5.1.jar:na]
    at clojure.lang.AFn.applyTo(AFn.java:151) [clojure-1.5.1.jar:na]
    at backtype.storm.daemon.worker.main(Unknown Source) [storm-core-0.9.4.jar:0.9.4]
Vladimir Vagaytsev
  • 2,871
  • 9
  • 33
  • 36
Ajeesh
  • 1,572
  • 3
  • 19
  • 32
  • Your setup sounds quite correct... Can you post your topology submission code? Please verify a second time, that the jar you submit does contain your `Alert.class` (also in the correct folder with regard to the package structure). You might also try to **not** register `Alert.class` (just as a sanity check). If not registered, Storm should use Java default serialization -- if this works, I guess it's a Kryo issue. – Matthias J. Sax Nov 08 '15 at 01:11
  • 1
    I solved this issue, the issue was I was running the supervisor/nimbus as root user & accessing nimbus as another user. Changing nimbus/supervisor to another user solved this issue. – Ajeesh Nov 12 '15 at 05:19

0 Answers0