简体   繁体   English

引起原因:java.lang.RuntimeException:java.io.NotSerializableException:io.netty.channel.DefaultChannelHandlerContext

[英]Caused by: java.lang.RuntimeException: java.io.NotSerializableException: io.netty.channel.DefaultChannelHandlerContext

Caused by: java.lang.RuntimeException: java.io.NotSerializableException: io.netty.channel.DefaultChannelHandlerContext at org.apache.storm.serialization.SerializableSerializer.write(SerializableSerializer.java:41) ~[storm-core-1.0.1.2.5.0.0-1245.jar:1.0.1.2.5.0.0-1245] at com.esotericsoftware.kryo.Kryo.writeClassAndObject(Kryo.java:628) ~[kryo-3.0.3.jar:?] at com.esotericsoftware.kryo.serializers.MapSerializer.write(MapSerializer.java:113) ~[kryo-3.0.3.jar:?] at com.esotericsoftware.kryo.serializers.MapSerializer.write(MapSerializer.java:39) ~[kryo-3.0.3.jar:?] at com.esotericsoftware.kryo.Kryo.writeClassAndObject(Kryo.java:628) ~[kryo-3.0.3.jar:?] at com.esotericsoftware.kryo.serializers.CollectionSerializer.write(CollectionSerializer.java:100) ~[kryo-3.0.3.jar:?] at com.esotericsoftware.kryo.serializers.CollectionSerializer.write(CollectionSerializer.java:40) ~[kryo-3.0.3.jar:?] at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:534) ~[kryo-3.0.3.jar:?] at org.apache.storm.seria 引起原因:java.lang.RuntimeException:java.io.NotSerializableException:io.netty.channel.DefaultChannelHandlerContext在org.apache.storm.serialization.SerializableSerializer.write(SerializableSerializer.java:41)〜[storm-core-1.0.1.2 .5.0.0-1245.jar:1.0.1.2.5.0.0-1245] com处com.esotericsoftware.kryo.Kryo.writeClassAndObject(Kryo.java:628)〜[kryo-3.0.3.jar :?] .esotericsoftware.kryo.serializers.MapSerializer.write(MapSerializer.java:113)〜[kryo-3.0.3.jar :?] at com.esotericsoftware.kryo.serializers.MapSerializer.write(MapSerializer.java:39)〜[ com.esotericsoftware.kryo.Kryo.writeClassAndObject(Kryo.java:628)中的kryo-3.0.3.jar :?] com.esotericsoftware.kryo.serializers.CollectionSerializer中的[kryo-3.0.3.jar :?]。在com.esotericsoftware.kryo.serializers.CollectionSerializer.write(CollectionSerializer.java:40)〜[kryo-3.0.3.jar :?]〜[kryo-3.0.3.jar :? ]在com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:534)〜[kryo-3.0.3.jar :?]在org.apache.storm.seria lization.KryoValuesSerializer.serializeInto(KryoValuesSerializer.java:44) ~[storm-core-1.0.1.2.5.0.0-1245.jar:1.0.1.2.5.0.0-1245] at org.apache.storm.serialization.KryoTupleSerializer.serialize(KryoTupleSerializer.java:44) ~[storm-core-1.0.1.2.5.0.0-1245.jar:1.0.1.2.5.0.0-1245] at org.apache.storm.daemon.worker$mk_transfer_fn$transfer_fn__6723.invoke(worker.clj:192) ~[storm-core-1.0.1.2.5.0.0-1245.jar:1.0.1.2.5.0.0-1245] at org.apache.storm.daemon.executor$start_batch_transfer__GT_worker_handler_BANG_$fn__6411.invoke(executor.clj:313) ~[storm-core-1.0.1.2.5.0.0-1245.jar:1.0.1.2.5.0.0-1245] at org.apache.storm.disruptor$clojure_handler$reify__6005.onEvent(disruptor.clj:40) ~[storm-core-1.0.1.2.5.0.0-1245.jar:1.0.1.2.5.0.0-1245] at org.apache.storm.utils.DisruptorQueue.consumeBatchToCursor(DisruptorQueue.java:451) ~[storm-core-1.0.1.2.5.0.0-1245.jar:1.0.1.2.5.0.0-1245] ... 6 more isation.KryoValuesSerializer.serializeInto(KryoValuesSerializer.java:44)〜[storm-core-1.0.1.2.5.0.0-1245.jar:1.0.1.2.5.0.0-1245] at org.apache.storm.serialization.KryoTupleSerializer .serialize(KryoTupleSerializer.java:44)〜[storm-core-1.0.1.2.5.0.0-1245.jar:1.0.1.2.5.0.0-1245] at org.apache.storm.daemon.worker $ mk_transfer_fn $ transfer_fn__6723.invoke(worker.clj:192)〜[storm-core-1.0.1.2.5.0.0-1245.jar:1.0.1.2.5.0.0-1245] at org.apache.storm.daemon.executor $ start_batch_transfer__GT_worker_handler_BANG_ $ fn__6411.invoke(executor.clj:313)〜[storm-core-1.0.1.2.5.0.0-1245.jar:1.0.1.2.5.0.0-1245] at org.apache.storm.disruptor $ clojure_handler $ reify__6005.onEvent(disruptor.clj:40)〜[storm-core-1.0.1.2.5.0.0-1245.jar:1.0.1.2.5.0.0-1245] at org.apache.storm.utils.DisruptorQueue.consumeBatchToCursor (DisruptorQueue.java:451)〜[storm-core-1.0.1.2.5.0.0-1245.jar:1.0.1.2.5.0.0-1245] ...还有6个

I use a storm local mode is no problem, but on the cluster will be reported to the fault. 我用暴风雨的本地模式没问题,但是在集群上会报错。

this is my code: 这是我的代码:

public class NettySpout extends BaseRichSpout {

private static final long serialVersionUID = 1L;
/**
 * colloctor for spout
 */
private SpoutOutputCollector collector;

@Override
public void open(Map map, TopologyContext topologyContext, SpoutOutputCollector spoutOutputCollector) {
    collector=spoutOutputCollector;
    StormServer stormServer=new StormServer();
    stormServer.run();
}

@Override
public void nextTuple() {
    Values tuple;
    try {
        while ((tuple = ServerHandler.queue.take()) != null) {
            collector.emit(tuple);
        }
    } catch (Exception e) {
    }
}

@Override
public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
    outputFieldsDeclarer.declare(new Fields("value","channl"));
}


public class ServerHandler extends ChannelInboundHandlerAdapter{

private static Logger logger = LogManager.getLogger(ServerHandler.class);
public static LinkedBlockingQueue<Values> queue = new LinkedBlockingQueue<Values>();
public static Map<String,ChannelHandlerContext> ctxes;

public void channelRead(ChannelHandlerContext ctx, Object msg)  throws Exception {
    JSONObject message = (JSONObject) msg;
    queue.put(new Values(new StreamData(message.toString().getBytes()), new HashMap<>(ctxes)));

}

我对风暴本身了解不多,但是好像您试图序列化ChannelHandlerContext(因为它存储在Map中)不是可序列化的。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM