폭풍에 새로 왔지만 여전히 로컬 컴퓨터에 스톰이 구성되었습니다. 나는 이클립스 프로젝트를 만들고 인터넷에서 간단한 예제를 따랐다. 이제 내 토폴로지가 제출되지만 작동하지 않습니다.스톰 토폴로지가 작동하지 않습니다.
토폴로지가 제출 되었습니까? 폭풍우에서 볼 수 있듯이 성공적으로 제출되었습니다.
내 토폴로지의 작업은 소수 인 경우 숫자를 인쇄하는 것입니다. 그러나 인쇄하지 않습니다.
르네 클래스 :
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 : 일식에서 토폴로지를 제출합니다.
어디서 인쇄 되길 기대합니까? 시스템 인쇄는 결코 로그 파일로 재 지정되지 않습니다. –
log4j 로거를 사용하여 로깅하고 있습니다. – Mr37037
그런데 어떻게 log4j를 설정 했습니까? –