Storm java.io.NotSerializableException:运行拓扑时

Storm java.io.NotSerializableException:运行拓扑时,java,redis,apache-storm,java-io,bigdata,Java,Redis,Apache Storm,Java Io,Bigdata,我最终认为我有一个写在redis数据库上的toopology。我有一个螺栓要打印,还有一个螺栓要插入redis。但当我尝试启动拓扑时,会出现以下错误: ...5333 [main-EventThread] INFO o.a.s.s.o.a.c.f.s.ConnectionStateManager - State change: CONNECTED 5376 [main] INFO b.s.d.supervisor - Starting supervisor with id 1917ef54-

我最终认为我有一个写在redis数据库上的toopology。我有一个螺栓要打印,还有一个螺栓要插入redis。但当我尝试启动拓扑时,会出现以下错误:

...5333 [main-EventThread] INFO  o.a.s.s.o.a.c.f.s.ConnectionStateManager - State change: CONNECTED
5376 [main] INFO  b.s.d.supervisor - Starting supervisor with id 1917ef54-0f16-47b8-86ea-b6722aa33c68 at host amnor-A88XPLUS
5405 [main] ERROR o.a.s.s.o.a.z.s.NIOServerCnxnFactory - Thread Thread[main,5,main] died
java.lang.RuntimeException: java.io.NotSerializableException: Storm.practice.Storm.Prova.ProvaTopology
    at backtype.storm.utils.Utils.javaSerialize(Utils.java:91) ~[storm-core-0.10.0.jar:0.10.0]
    at backtype.storm.topology.TopologyBuilder.createTopology(TopologyBuilder.java:107) ~[storm-core-0.10.0.jar:0.10.0]
    at Storm.practice.Storm.Prova.ProvaTopology.main(ProvaTopology.java:383) ~[classes/:?]
Caused by: java.io.NotSerializableException: Storm.practice.Storm.Prova.ProvaTopology
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1183) ~[?:1.7.0_91]
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1547) ~[?:1.7.0_91]
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1508) ~[?:1.7.0_91]
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431) ~[?:1.7.0_91]
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177) ~[?:1.7.0_91]
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1547) ~[?:1.7.0_91]
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1508) ~[?:1.7.0_91]
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431) ~[?:1.7.0_91]
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177) ~[?:1.7.0_91]
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347) ~[?:1.7.0_91]
    at backtype.storm.utils.Utils.javaSerialize(Utils.java:87) ~[storm-core-0.10.0.jar:0.10.0]
    ... 2 more
我认为这可能是喷口,但我尝试了一个例子喷口,可以在风暴的例子和发生相同。我的代码只是在读取的名称中添加笑脸,例如(John:):),我只是尝试将流真正存储到redis数据库,它只是一个从文件中读取名称的小测试拓扑。之后,我在我的大学里为一个大数据项目做了一个严肃的拓扑。这是我的代码(有许多未使用的导入,但这是因为我尝试了不同的方法写入数据库):


提前感谢

这里的例外情况非常清楚。如果您只是查看
java.io.NotSerializableException
的文档,您会发现正在打印的消息是不可序列化的类。要修复此问题,只需让拓扑类实现可序列化的:

public class ProvaTopology implements Serializable {
    ...
}

这是必要的,以便Storm可以序列化您的拓扑并将其发送给Nimbus执行。由于您的Bolt和Spout扩展或实现了Storm提供的类或接口,因此您不必担心将它们标记为可序列化的,因为这些父类和接口已经这样做了。

这里的例外情况非常清楚。如果您只是查看
java.io.NotSerializableException
的文档,您会发现正在打印的消息是不可序列化的类。要修复此问题,只需让拓扑类实现可序列化的:

public class ProvaTopology implements Serializable {
    ...
}

这是必要的,以便Storm可以序列化您的拓扑并将其发送给Nimbus执行。由于您的Bolt和Spout扩展或实现了Storm提供的类或接口,因此您不必担心将它们标记为可序列化,因为这些父类和接口已经这样做了。

异常非常清楚:
public class ProvaTopology实现了可序列化
异常非常清楚:
public class ProvaTopology实现了可序列化
,谢谢!我是这些技术的noob.现在它说文件不存在。。我看了看,它就在那里。我正在用Eclipse运行测试,使用Eclipse IDE时是否有读取文件的特定路径?再次感谢。它很有效,谢谢!我是这些技术的noob.现在它说文件不存在。。我看了看,它就在那里。我正在用Eclipse运行测试,使用Eclipse IDE时是否有读取文件的特定路径?再次感谢。