簡體   English   中英

風暴拓撲不起作用

[英]Storm Topology not working

我是新手,但是仍然在本地計算機上配置了Storm。 我做了一個日食項目,並遵循了一個來自互聯網的簡單示例。 現在我的拓撲已提交,但無法正常工作。

是否提交拓撲? 是的,它已經成功提交,因為我可以在ui界面上看到它。

我的拓撲的工作是僅打印一個質數。 但是它沒有打印出來。

我提供了以下代碼:

壺嘴類:

public class NumberSpout extends BaseRichSpout 
{
    private SpoutOutputCollector collector;
    private static final Logger LOGGER = Logger.getLogger(SpoutOutputCollector.class);
    private static int currentNumber = 1;

    @Override
    public void open( Map conf, TopologyContext context, SpoutOutputCollector collector ) 
    {
        this.collector = collector;
    }

    @Override
    public void nextTuple() 
    {
        // Emit the next number
        LOGGER.info("Coming in spout tuble method");
        collector.emit( new Values( new Integer( currentNumber++ ) ) );
    }

    @Override
    public void ack(Object id) 
    {
    }

    @Override
    public void fail(Object id) 
    {
    }

    @Override
    public void declareOutputFields(OutputFieldsDeclarer declarer) 
    {
        declarer.declare( new Fields( "number" ) );
    }
}

螺栓類別:

public class PrimeNumberBolt extends BaseRichBolt 
{   private static final Logger LOGGER = Logger.getLogger(PrimeNumberBolt.class);
    private OutputCollector collector;

    public void prepare( Map conf, TopologyContext context, OutputCollector collector ) 
    {
        this.collector = collector;
    }

    public void execute( Tuple tuple ) 
    {
        int number = tuple.getInteger( 0 );
        if( isPrime( number) )
        {
            LOGGER.info("Prime number printed is: )" +number);
           System.out.println( number );
        }
        collector.ack( tuple );
    }

    public void declareOutputFields( OutputFieldsDeclarer declarer ) 
    {
        declarer.declare( new Fields( "number" ) );
    }   

    private boolean isPrime( int n ) 
    {
        if( n == 1 || n == 2 || n == 3 )
        {
            return true;
        }

        // Is n an even number?
        if( n % 2 == 0 )
        {
            return false;
        }

        //if not, then just check the odds
        for( int i=3; i*i<=n; i+=2 ) 
        {
            if( n % i == 0)
            {
                return false;
            }
        }
        return true;
    }
}

拓撲類別:

public class PrimeNumberTopology 
{
    public static void main(String[] args) 
    {
        TopologyBuilder builder = new TopologyBuilder();
        builder.setSpout( "spout", new NumberSpout(),1 );
        builder.setBolt( "prime", new PrimeNumberBolt(),1 )
                .shuffleGrouping("spout");
        Config conf = new Config();
        conf.put(Config.NIMBUS_HOST, "127.0.0.1");
        conf.setDebug(true);
        Map storm_conf = Utils.readStormConfig();
        storm_conf.put("nimbus.host", "127.0.0.1");
        Client client = NimbusClient.getConfiguredClient(storm_conf)
                .getClient();
        String inputJar = "/home/jamil/Downloads/storm-twitter-word-count-master/target/storm-test-1.0-SNAPSHOT.jar";
        NimbusClient nimbus = new NimbusClient("127.0.0.1",6627);
        // upload topology jar to Cluster using StormSubmitter
        String uploadedJarLocation = StormSubmitter.submitJar(storm_conf,
                inputJar);
        try {
            String jsonConf = JSONValue.toJSONString(storm_conf);
            nimbus.getClient().submitTopology("newtesttopology",
                    uploadedJarLocation, jsonConf, builder.createTopology());
        } catch (AlreadyAliveException ae) {
            ae.printStackTrace();
        } catch (InvalidTopologyException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (TException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

現在我想問一問為什么不打印? 還是為什么不將其寫入日志文件?

另外:我正在從Eclipse提交拓撲。

除了@Thomas Jungblut所說的(關於log4j配置)並假設它是拓撲的完整源代碼之外,還請查看nextTuple()方法。
您的噴口只是發出一個值而已。 您很有可能會錯過控制台中發出的輸出,因為它被埋在大量其他日志記錄輸出中。
您確定要只發出一個值嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM