クラスを次のように変更しましWordCount
たWordCountTopology
。
public static class WordCount extends BaseBasicBolt {
Map<String, Integer> counts = new HashMap<String, Integer>();
@Override
public void execute(Tuple tuple, BasicOutputCollector collector) {
String word = tuple.getString(0);
Integer count = counts.get(word);
if(count==null) count = 0;
count++;
counts.put(word, count);
OutputStream o;
try {
o = new FileOutputStream("~/abc.txt", true);
o.write(word.getBytes());
o.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
collector.emit(new Values(word, count));
}
@Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
declarer.declare(new Fields("word", "count"));
}
}
ここで、単語を file に書き込みますabc.txt
。
WordCountTopology
をローカル モードで実行したとき(を使用LocalCluster
)、問題なく動作しました。しかし、(StormSubmitter.submitTopology()
メソッドを使用した)分散モードで実行している場合、メソッドがまったく実行されていないかのように、WordCount
クラスは単語を書き込みませんでした。誰か私にアイデアを教えてもらえますか?どうもありがとう!abc.txt
execute()
PSニンバス、スーパーバイザー、UI、飼育係は正常に動作していると確信しており、127.0.0.1:8080 でタスクを確認できます。