2016-03-21 8 views
0

MainTopologyクラスのランタイム中にエラーが発生していますが、行番号にエラーが表示されます。 24私は理解できませんでした。 メインクラスは次のとおりです。 package streamPostsCount;Apache Storm InvalidTopologyException

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/:?] 

を任意の助けが最も高く評価され

+1

から放出されるposts-by-userとして宣言フィールドがないと言っています。すべての "起因する"セクションをテキストとして、コードとして書式(インデント4スペース)のCOMPLETEスタックトレースをコピー/ペーストします。 –

+0

はい、あなたの提案通りでしたか?今はっきりしていることを願っています。 – Ravan

答えて

0

あなたの発光ボルト(分割後のボルト)もdeclareOutputFieldsを(実装する必要があります。

@Override 
public void declareOutputFields(OutputFieldsDeclarer declarer) { 
    declarer.declare(new Fields("posts-by-user","field2","field3")); // list the fields you'll emit 
} 
0

ボルトから放出するときはいつでも、メソッドをオーバーライドする必要があります public void declareOutputFields(OutputFieldsDeclarer declarer); あなたが発光しているフィールドは何ですか?嵐は明らかにボルトスクリーンショットを投稿しないでくださいsplit-post-bolt

@Override 
public void declareOutputFields(OutputFieldsDeclarer declarer) { 
    declarer.declare(new Fields("posts-by-user")); 
} 
関連する問題