package WordCount;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.apache.storm.task.TopologyContext;
import org.apache.storm.topology.BasicOutputCollector;
import org.apache.storm.topology.FailedException;
import org.apache.storm.topology.IBasicBolt;
import org.apache.storm.topology.OutputFieldsDeclarer;
import org.apache.storm.tuple.Tuple;
public class SumBolt implements IBasicBolt {
/**
*
*/
private static final long serialVersionUID = 1L;
Map<String, Integer> counts = new HashMap<String, Integer>();
@Override
public void declareOutputFields(OutputFieldsDeclarer arg0) {
// TODO Auto-generated method stub
}
@Override
public Map<String, Object> getComponentConfiguration() {
// TODO Auto-generated method stub
return null;
}
@Override
public void cleanup() {
// TODO Auto-generated method stub
}
@Override
public void execute(Tuple input, BasicOutputCollector arg1) {
// TODO Auto-generated method stub
try {
long word_count = 0;//总数
long word_sum = 0;//个数,去重后
//此处两个不放在外面,不然就是累加了
String word = input.getString(0);
Integer count = input.getInteger(1);
counts.put(word, count);
//获取总数,遍历counts的value,进行sum
Iterator<Integer> i = counts.values().iterator();
while(i.hasNext())
{
word_sum +=i.next();
}
//wordcount的结果全部发送到同一个bolt里面,每一个都存到map里面,遍历map,必须开单线程
//获取word去重个数,遍历counts的keySet,取count
Iterator<String> i2 = counts.keySet().iterator();
while(i2.hasNext())
{
String oneWordString = i2.next();
if (oneWordString != null) {
word_count ++;
}
}
System.err.println("word_sum="+word_sum+" word_count");
} catch (Exception e) {
throw new FailedException("SumBolt fail");
// TODO Auto-generated catch block
}
}
@Override
public void prepare(Map arg0, TopologyContext arg1) {
// TODO Auto-generated method stub
}
}
storm代码练习-SumBolt
最新推荐文章于 2018-08-27 17:35:02 发布