流式处理新玩法,Esper和Storm的联合统计分析
来源:互联网 发布:太原知豆d1补贴后价格 编辑:程序博客网 时间:2024/06/06 12:46
一、首先是一个开源项目(storm-ester):
https://github.com/tomdz/storm-esper
二、导入工程项目
自带的TwitterEsperSample.java例子好像不太好用,反正运行着没什么效果
自己写一个例子
总的来说就是spout模拟发送5次数据,EsperBolt接收后根据规则进行统计输出(这里是每两次计算平均值),然后最后一个bolt展示结果
1、首先是一个Spout:
public class Esper_Spout extends BaseRichSpout { SpoutOutputCollector collector; Map<Integer, String> toSend; @Override public void open(Map map, TopologyContext topologyContext, SpoutOutputCollector spoutOutputCollector) { this.collector = spoutOutputCollector; System.out.println(">Spout-->>open<<"); toSend = new HashMap<Integer, String>(); for (int i = 5; i < 10; i++) { toSend.put(i, "test--" + i); } } @Override public void nextTuple() { if (!toSend.isEmpty()) { for (Map.Entry<Integer, String> transactionEntry : toSend.entrySet()) { Integer transactionId = transactionEntry.getKey(); System.out.println(">Spout->send:" + transactionId); //发送需要esper计算的数据,可多个 collector.emit(tuple(transactionId)); } toSend.clear(); } } @Override public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) { outputFieldsDeclarer.declare(new Fields("price")); }}
2、然后写一个Bolt接收Esper处理后的结果输出
public class Esper_Bolt implements IRichBolt { private OutputCollector collector; @Override public void prepare(Map map, TopologyContext topologyContext, OutputCollector outputCollector) { this.collector = outputCollector; } @Override public void execute(Tuple tuple) { //这里就是结果啦 Object result = tuple.getValueByField("tps"); System.out.println("-->>bolt esper result--->"+result); } @Override public void cleanup() { } @Override public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) { outputFieldsDeclarer.declare(new Fields("word")); } @Override public Map<String, Object> getComponentConfiguration() { return null; }}
3、最后来个main 方法运行起来
public class Esper_Sample { public static void main(String[] args) { Logger.getRootLogger().removeAllAppenders(); EsperBolt bolt = new EsperBolt.Builder() .inputs().aliasStream("spout1").toEventType("Apple") .outputs().onDefaultStream().emit("tps") .statements().add("select avg(price) as tps from Apple.win:length_batch(2)") .build(); TopologyBuilder builder = new TopologyBuilder(); builder.setSpout("spout1", new Esper_Spout()); builder.setBolt("get-categ", bolt) .shuffleGrouping("spout1"); builder.setBolt("get-result", new Esper_Bolt()) .shuffleGrouping("get-categ"); Config conf = new Config(); conf.setDebug(true); LocalCluster cluster = new LocalCluster(); cluster.submitTopology("test", conf, builder.createTopology());// Utils.sleep(3000);// cluster.shutdown(); }}
然后就可以看到输出结果啦
阅读全文
0 0
- 流式处理新玩法,Esper和Storm的联合统计分析
- 【storm-kafka】storm和kafka结合处理流式数据
- Esper的POJO事件处理
- 移动医疗的新玩法
- 全民营销的新玩法
- storm流式处理框架
- Storm:流式处理框架
- storm消息的可靠处理和容错
- esper 对doc的翻译和注解
- 【新媒体】现阶段新闻聚合的玩法
- 【新媒体】现阶段新闻聚合的玩法
- 【新媒体】现阶段新闻聚合的玩法
- 【新媒体】现阶段新闻聚合的玩法
- 3.1的Widget有新玩法啦
- Google 的新玩法 Fact Check
- OpenStack 与 Rancher 融合的新玩法
- 棋牌游戏的新玩法,房卡版
- 多彩的Console打印新玩法
- Hadoop之Flume架构以及应用介绍
- vue使用$emit时,父组件无法监听到子组件的事件
- redis 3.2 集群环境搭建
- Android webview长按图片保存到本地
- 51nod 1349 最大值
- 流式处理新玩法,Esper和Storm的联合统计分析
- 获取视频的宽高和长度
- Java输入输出(I/O)流
- 时间范围比较
- JZOJ 1319. 邮递员
- numpy中的常用函数
- phoenix的URL使用
- [Leetcode] 267. Palindrome Permutation II 解题报告
- 暑假NOIP集训6.30~7.5总结