Hi, I got a InvalidClassException in the supervior after uploading the jars to storm using the *"storm jar"* command. The exception is as below:
2016-09-06 21:49:32.649 org.apache.storm.daemon.executor [INFO][main] Loading executor __acker:[8 8] 2016-09-06 21:49:32.661 org.apache.storm.daemon.executor [INFO][main] Loaded executor tasks __acker:[8 8] 2016-09-06 21:49:32.672 org.apache.storm.daemon.executor [INFO][main] Timeouts disabled for executor __acker:[8 8] 2016-09-06 21:49:32.673 org.apache.storm.daemon.executor [INFO][main] Finished loading executor __acker:[8 8] 2016-09-06 21:49:32.688 org.apache.storm.daemon.executor [INFO][main] Loading executor EventDistributionBolt:[2 2] 2016-09-06 21:49:32.711 org.apache.storm.daemon.executor [INFO][main] Loaded executor tasks EventDistributionBolt:[2 2] 2016-09-06 21:49:32.713 org.apache.storm.daemon.executor [INFO][main] Finished loading executor EventDistributionBolt:[2 2] 2016-09-06 21:49:32.728 org.apache.storm.daemon.executor [INFO][main] Loading executor SubscriptionFinderBolt:[6 6] 2016-09-06 21:49:32.735 org.apache.storm.daemon.executor [INFO][main] Loaded executor tasks SubscriptionFinderBolt:[6 6] 2016-09-06 21:49:32.742 org.apache.storm.daemon.executor [INFO][main] Finished loading executor SubscriptionFinderBolt:[6 6] 2016-09-06 21:49:32.753 org.apache.storm.daemon.executor [INFO][main] Loading executor __system:[-1 -1] 2016-09-06 21:49:32.755 org.apache.storm.daemon.executor [INFO][main] Loaded executor tasks __system:[-1 -1] 2016-09-06 21:49:32.757 org.apache.storm.daemon.executor [INFO][main] Finished loading executor __system:[-1 -1] 2016-09-06 21:49:32.768 org.apache.storm.daemon.executor [INFO][main] Loading executor __metricscom.xxx.alp.storm.metric.ServiceLogMetricsConsumer:[10 10] 2016-09-06 21:49:32.771 org.apache.storm.daemon.executor [INFO][main] Loaded executor tasks __metricscom.xxxx.alp.storm.metric.ServiceLogMetricsConsumer:[10 10] 2016-09-06 21:49:32.777 org.apache.storm.daemon.executor [INFO][main] Finished loading executor __metricscom.xxxx.alp.storm.metric.ServiceLogMetricsConsumer:[10 10] 2016-09-06 21:49:32.789 org.apache.storm.daemon.executor [INFO][main] Loading executor EventStreamSpout:[4 4] 2016-09-06 21:49:32.807 org.apache.storm.messaging.netty.Client [ERROR][client-boss-1] connection attempt 2 to Netty-Client-alp-storm-supervisor-2a-i-f478ab2f.XXXXXXXX.com/xxxx:6700 failed: java.net.ConnectException: Connection refused: alp-storm-supervisor-2a-i-f478ab2f.XXXX.com/xxxx:6700 2016-09-06 <http://alp-storm-supervisor-2a-i-f478ab2f.XXXX.com/xxxx:67002016-09-06> 21:49:32.936 org.apache.storm.daemon.worker [ERROR][main] Error on initialization of server mk-workerjava.lang.RuntimeException: java.io.InvalidClassException: com.fasterxml.jackson.databind.deser.BasicDeserializerFactory; local class incompatible: stream classdesc serialVersionUID = -1426550576764902820, local class serialVersionUID = 2445376702910286321 at org.apache.storm.utils.Utils.javaDeserialize(Utils.java:179) ~[storm-core-1.0.x.jar:?] at org.apache.storm.utils.Utils.getSetComponentObject(Utils.java:430) ~[storm-core-1.0.x.jar:?] at org.apache.storm.daemon.task$get_task_object.invoke(task.clj:74) ~[storm-core-1.0.x.jar:?] at org.apache.storm.daemon.task$mk_task_data$fn__5625.invoke(task.clj:177) ~[storm-core-1.0.x.jar:?] at org.apache.storm.util$assoc_apply_self.invoke(util.clj:930) ~[storm-core-1.0.x.jar:?] at org.apache.storm.daemon.task$mk_task_data.invoke(task.clj:170) ~[storm-core-1.0.x.jar:?] at xxxx...... >From the exception, I figured out it was because the version of jackson-databind classes in the uploaded jar was not the same as the jackson-databind the supervisor uses. Then I make them the same and re-upload the jars again. The executor at the supervisor node could be started without issue this time. Based on this issue, my questions are: 1. Do I have to make all the shared classes between supervisor and the jar I uploaded the same version? This seems impossible, since once I uploading new jars containing new version or deploying new version of class to the supervisor, the issue above would happen. 2. What is the serialize/deserialize machanism storm uses during starting an executor inside the worker process? What would it serialize/deserialize? 3. If the answer to the first question is yes, how to upgrade a class shared by supervior and the uploaded jar without impacting the stream processing? I would appreciate it very much if anyone could answer the questions. Thanks. -- Jianfei Li -- Jianfei Li
