2014-10-25 5 views
0

폭풍에 새로 왔지만 여전히 로컬 컴퓨터에 스톰이 구성되었습니다. 나는 이클립스 프로젝트를 만들고 인터넷에서 간단한 예제를 따랐다. 이제 내 토폴로지가 제출되지만 작동하지 않습니다.스톰 토폴로지가 작동하지 않습니다.

토폴로지가 제출 되었습니까? 폭풍우에서 볼 수 있듯이 성공적으로 제출되었습니다.

내 토폴로지의 작업은 소수 인 경우 숫자를 인쇄하는 것입니다. 그러나 인쇄하지 않습니다.

르네 클래스 :

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(); 
     } 
    } 
} 

이제 인쇄하지 않는 이유는 무엇입니까? 아니면 로그 파일에 기록하지 않는 이유는 무엇입니까?

PLUS : 일식에서 토폴로지를 제출합니다.

+0

어디서 인쇄 되길 기대합니까? 시스템 인쇄는 결코 로그 파일로 재 지정되지 않습니다. –

+0

log4j 로거를 사용하여 로깅하고 있습니다. – Mr37037

+0

그런데 어떻게 log4j를 설정 했습니까? –

답변

0

(log4j 구성과 관련하여) @Thomas Jungblut이 무엇인지 말하고 이것이 해당 토폴로지의 완전한 소스 코드라고 가정 한 다음, 귀하의 nextTuple() 분출 방법을 살펴보십시오.
귀하의 스파우트는 단지 하나의 값을 방출하고 있습니다. 다른 로깅 출력 톤 아래에 묻혀 있기 때문에 콘솔에서 출력되는 출력이 누락 될 가능성이 큽니다.
값을 하나만 내보내시겠습니까?

관련 문제