1
私は嵐で新しいです、私は嵐の単語カウントの例を通過していた。ここに私の理解からカウントを追跡し、ボルトこの単語数はどのように安全ですか?
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);
collector.emit(new Values(word, count));
}
@Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
declarer.declare(new Fields("word", "count"));
}
}
は、嵐が並行して実行ボルトのために複数のスレッドを起動しているので、どのようにここではスレッドセーフをHashMapの使用していますか?
ので、その場合には、実行中のハッシュマップの複数のインスタンスがあるのですか?キーのすべてではなく、値が1か所に存在しますか? – Dude
はい、あります。トポロジの説明で '.fieldsGrouping(" split "、新しいFields(" word "))'のために、各単語は単一のボルトにしか現れません。 –