Java Apache Storm InvalidTopologyException

Java Apache Storm InvalidTopologyException,java,apache-storm,bigdata,Java,Apache Storm,Bigdata,我在MainTopology类的运行时遇到一个错误,它在第24行中显示了一个我无法理解的错误。 以下是主要课程: 邮包 import backtype.storm.Config; import backtype.storm.LocalCluster; import backtype.storm.topology.TopologyBuilder; import backtype.storm.tuple.Fields; public class MainTopology {

我在MainTopology类的运行时遇到一个错误,它在第24行中显示了一个我无法理解的错误。 以下是主要课程: 邮包

  import backtype.storm.Config;
  import backtype.storm.LocalCluster;
  import backtype.storm.topology.TopologyBuilder;
  import backtype.storm.tuple.Fields;

  public class MainTopology {

   public static void main(String[] args) throws Exception{
      //Create config instance for cluster configuration
      Config config = new Config();
      config.setDebug(true);

      TopologyBuilder builder = new TopologyBuilder();
      builder.setSpout("post-reader-spout", new StreamReaderSpout());

      builder.setBolt("split-post-bolt", new PostSplitterBolt()).shuffleGrouping("post-reader-spout");

      builder.setBolt("update-posts-bolt", new PostsUpdateBolt())
    .fieldsGrouping("split-post-bolt", new Fields("posts-by-user"));

      LocalCluster cluster = new LocalCluster();
      cluster.submitTopology("PostsCount", config, builder.createTopology());
      Thread.sleep(10000);
      //Stop the topology
      cluster.shutdown();
    }

 }
这就是我得到的错误:

  3049 [main-EventThread] INFO  o.a.s.s.o.a.c.f.s.ConnectionStateManager - State change: CONNECTED
  3066 [main] INFO  b.s.d.supervisor - Starting supervisor with id 1a6399fb-360b-4f8f-bd4d-b09711fbcb24 at host mdh160
  3074 [main] INFO  b.s.d.nimbus - [req 1] Access from:  principal: op:submitTopology
  3099 [main] WARN  b.s.d.nimbus - Topology submission exception. (topology name='PostsCount') #<InvalidTopologyException InvalidTopologyException(msg:Component: [update-posts-bolt] subscribes from stream: [default] of component [split-post-bolt] with non-existent fields: #{"posts-by-user"})>
  3099 [main] ERROR o.a.s.s.o.a.z.s.NIOServerCnxnFactory - Thread Thread[main,5,main] died
  backtype.storm.generated.InvalidTopologyException
at backtype.storm.daemon.common$validate_structure_BANG_.invoke(common.clj:169) ~[storm-core-0.10.0.jar:0.10.0]
at backtype.storm.daemon.common$system_topology_BANG_.invoke(common.clj:299) ~[storm-core-0.10.0.jar:0.10.0]
at backtype.storm.daemon.nimbus$fn__6583$exec_fn__1236__auto__$reify__6598.submitTopologyWithOpts(nimbus.clj:1091) ~[storm-core-0.10.0.jar:0.10.0]
at backtype.storm.daemon.nimbus$fn__6583$exec_fn__1236__auto__$reify__6598.submitTopology(nimbus.clj:1119) ~[storm-core-0.10.0.jar:0.10.0]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_72]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_72]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_72]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_72]
at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:93) ~[clojure-1.6.0.jar:?]
at clojure.lang.Reflector.invokeInstanceMethod(Reflector.java:28) ~[clojure-1.6.0.jar:?]
at backtype.storm.testing$submit_local_topology.invoke(testing.clj:276) ~[storm-core-0.10.0.jar:0.10.0]
at backtype.storm.LocalCluster$_submitTopology.invoke(LocalCluster.clj:43) ~[storm-core-0.10.0.jar:0.10.0]
at backtype.storm.LocalCluster.submitTopology(Unknown Source) ~[storm-core-0.10.0.jar:0.10.0]
at streamPostsCount.MainTopology.main(MainTopology.java:24) ~[StreamLayer/:?]
3049[主事件线程]信息o.a.s.s.o.a.c.f.s.ConnectionStateManager-状态更改:已连接
3066[主]信息b.s.d.主管-主机mdh160上id为1a6399fb-360b-4f8f-bd4d-b09711fbcb24的启动主管
3074[主]信息b.s.d.nimbus-[req 1]访问来源:负责人:op:submitTopology
3099[main]警告b.s.d.nimbus-拓扑提交异常。(拓扑名称='PostScont')#
3099[main]错误o.a.s.s.o.a.z.s.NIOServerCnxnFactory-线程[main,5,main]已死亡
backtype.storm.generated.InvalidTopologyException
在backtype.storm.daemon.common$validate\u structure\u BANG\u.invoke(common.clj:169)~[storm-core-0.10.0.jar:0.10.0]
在backtype.storm.daemon.common$system\u topology\u BANG\u.invoke(common.clj:299)~[storm-core-0.10.0.jar:0.10.0]
在backtype.storm.daemon.nimbus$fn_6583$exec_fn_1236__自动__$reify_6598.submitTopologyWithOpts(nimbus.clj:1091)~[storm-core-0.10.0.jar:0.10.0]
在backtype.storm.daemon.nimbus$fn_6583$exec_fn_1236__自动__$reify_6598.submitTopology(nimbus.clj:1119)~[storm-core-0.10.0.jar:0.10.0]
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)~[?:1.8.0_72]
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)~[?:1.8.072]
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)~[?:1.8.072]
在java.lang.reflect.Method.invoke(Method.java:498)~[?:1.8.0_72]
在clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:93)~[clojure-1.6.0.jar:?]
在clojure.lang.Reflector.invokeInstanceMethod(Reflector.java:28)~[clojure-1.6.0.jar:?]
在backtype.storm.testing$submit\u local\u topology.invoke(testing.clj:276)~[storm-core-0.10.0.jar:0.10.0]
在backtype.storm.LocalCluster$\u submitTopology.invoke(LocalCluster.clj:43)~[storm-core-0.10.0.jar:0.10.0]
在backtype.storm.LocalCluster.submitTopology(未知源)~[storm-core-0.10.0.jar:0.10.0]
在streampostsunt.MainTopology.main(MainTopology.java:24)~[StreamLayer/:?]
非常感谢您的帮助

您的发射螺栓(分离柱螺栓)还需要实现declareOutputFields():

您的发射螺栓(分离柱螺栓)还需要实现declareOutputFields():


无论何时从螺栓发射,都需要重写方法
public void declareOutputFields(outputfieldsclarer declarer)
并提及你正在发射的场。Storm清楚地表明,没有任何字段被用户声明为
posts
,可以从bolt
split post bolt

@Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
    declarer.declare(new Fields("posts-by-user"));
}

无论何时从螺栓发射,都需要重写方法
public void declareOutputFields(outputfieldsclarer declarer)
并提及你正在发射的场。Storm清楚地表明,没有任何字段被用户声明为
posts
,可以从bolt
split post bolt

@Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
    declarer.declare(new Fields("posts-by-user"));
}

不要发布截图。复制/粘贴完整的堆栈跟踪,包括作为文本的所有“由”部分和作为代码的格式(缩进4个空格)。是的,按照您的建议执行。我希望现在一切都清楚了。不要发布截图。复制/粘贴完整的堆栈跟踪,包括作为文本的所有“由”部分和作为代码的格式(缩进4个空格)。是的,按照您的建议执行。我希望现在一切都清楚了。