SODBASE CEP学习(四)续:类SQL语言EPL与Storm或jStorm集成-滑动窗口
来源:互联网 发布:dns服务器的端口 编辑:程序博客网 时间:2024/06/11 23:50
Storm为什么要集成SQL呢?这个问题答案很简单:为了做分析。毕竟Storm最擅长的是短文本计数,对数据的操作和分析还是比较麻烦的。上篇写了类SQL语言EPL与Storm集成的方法,示例是日志分析。可能有些复杂,这次写个常用的简单的示例,滑动窗口的应用。
本示例的功能是每十秒统计一次数据,比如求平均值或计数。
1.示例操作步骤
1.1 制作EPL模型
下载SODBASE Studio,在SODBASE Studio绘制EPL模型,将模型导出为XML文件在Storm中使用。使用Storm输出适配器,级联输入适配器。timer1为10秒定时触发器,timer2为timer1的延迟事件,与timer1形成一个半开半闭的10秒时间区间。
具体步骤见教程视频。下载解压,第1个为建模过程,第2个为导出为XML。XML还可以再手工补充修改。
生成的XML已经放到了下一节的Eclipse工程中,读者如果时间有限,也可以直接进入下一步。
1.2 编写topology代码
下载Storm-EPL-Example 压缩包,解压是一个Eclipse工程,导入到Eclipse中。不用maven,依赖的包都在lib文件夹下,加到build path即可。
打开com.sodbase.integration.storm.windowexample.WindowStatisticExampleTopology.java
Run As->Java Application,就可以在Eclipse中看到输出效果
打包后的jar包可以部署到storm服务器上。
注:使用jStorm的读者,配置方法和Storm一致。在Eclipse工程的lib/storm中使用jstorm依赖的jar包即可。
2. 工作原理
2.1 SODSQL语句
SODSQL的写法请参考 SODBASE CEP学习(五):流式计算中的类SQL语言EPL,其中的窗口查询和定时统计小节。下面语句中我们在10秒的滑动窗口上查询数量和平均价格。
SELECT average(data.price) AS avg, count(data.price) AS countFROM se:timer1;data:userinput;ee:timer2PATTERN se;data^+;ee//se开始事件,data^+事件累积,ee结束事件WHERE ee._start_time_-se._start_time_=10001 WITHIN 10001 //10s的半开半闭窗口
2.2 Topology代码
有了EPL XML,配置4个参数,就可以在Topology里面用EPL 类SQL语句了
package com.sodbase.integration.storm.windowexample;import backtype.storm.Config;import backtype.storm.LocalCluster;import backtype.storm.StormSubmitter;import backtype.storm.topology.TopologyBuilder;import backtype.storm.tuple.Fields;import backtype.storm.utils.Utils;import com.sodbase.integration.storm.PrintBolt;import com.sodbase.outputadaptor.storm.EPLBolt;public class WindowStatisticExampleTopology { public static void main(String[] args) throws Exception { TopologyBuilder builder = new TopologyBuilder(); /** * EPLBolt相关配置 */ //(1)Bolt的tuple连到EPL哪个流输入上面 String streamname="userinput"; //(2)输出的字段,与EPL输出对应 Fields outputFields = new Fields("avg","count","products"); //(3)EPL引擎cep home String cep_home="cep_home"; //(4)EPL模型文件 String[] cepmodelfiles=new String[]{ "cep_home/files/windowquery.xml", "cep_home/files/windowtimer.xml", }; builder.setSpout("event", new RandomBuyEventSpout(), 1); builder.setBolt("EPL", new EPLBolt(streamname,outputFields,cep_home,cepmodelfiles), 1).shuffleGrouping("event"); builder.setBolt("print1", new PrintBolt(), 1).shuffleGrouping("EPL"); Config conf = new Config(); conf.setDebug(false); if (args != null && args.length > 0) { conf.setNumWorkers(3); StormSubmitter.submitTopology(args[0], conf, builder.createTopology()); } else { LocalCluster cluster = new LocalCluster(); cluster.submitTopology("test", conf, builder.createTopology()); Utils.sleep(1000000); cluster.killTopology("test"); cluster.shutdown(); } }}
参考:
SODBASE CEP学习(四)续:类SQL语言EPL与Storm或jStorm集成-使用分布式缓存
SODBASE CEP学习进阶篇(七):SODBASE CEP与Spark streaming集成
SODBASE CEP学习进阶篇(七)续:SODBASE CEP与Spark streaming集成-规则管理
SODBASE CEP用于轻松、高效实施数据监测、监控类、交易类、实时分析类项目。EPL语法见SODSQL写法与示例。图形化建模请使用SODBASE Studio。
开发者社区活动,SODBASE产品的用户现在可以领礼品啦
- SODBASE CEP学习(四)续:类SQL语言EPL与Storm或jStorm集成-滑动窗口
- SODBASE CEP学习(四):类SQL语言EPL与Storm或jStorm集成
- SODBASE CEP学习(四)续:类SQL语言EPL与Storm或jStorm集成-使用分布式缓存
- SODBASE实时大数据基础(二):类SQL语言EPL与Storm或jStorm集成
- SODBASE CEP学习(五):流式计算中的类SQL语言EPL
- SODBASE CEP学习进阶篇(七)续:SODBASE CEP与Spark streaming集成-低延迟规则管理
- SODBASE CEP学习进阶篇(七):SODBASE CEP与Spark streaming集成
- SODBASE CEP学习(二):运行第一个EPL例子
- SODBASE CEP学习(十):在线动态修改EPL规则
- SODBASE CEP学习(十三):EPL常用函数
- SODBASE CEP学习(十五):常见场景EPL示例
- SODBASE CEP学习进阶篇(二)续:日志采集-Logstash、Kafka和CEP集成
- SODBASE CEP学习进阶篇(五):与分布式缓存集成
- SODBASE CEP学习(一):SODBASE CEP简介
- SODBASE CEP学习(十一):分布式集群
- SODBASE CEP学习(三):GUI建模工具SODBASE Studio和CEP服务器
- SODBASE CEP学习进阶篇(四):自己控制时钟和时间戳
- SODBASE CEP学习进阶篇(二)续:日志采集之外的APM探针方法
- ios之下拉刷新上拉加载更多
- 那种好美好。爱情这东西,这她妈的不靠谱
- JSON.parse()和JSON.stringify()
- Haproxy的详解和配置
- Android:Listview中嵌套viewpager的实现总结
- SODBASE CEP学习(四)续:类SQL语言EPL与Storm或jStorm集成-滑动窗口
- 几个搭建环境的问题,留个记录
- Log4j详细配置(转)
- Jenkins配置脚本打渠道包
- github上值得关注的前端项目
- allegro 16.x 镜像整个模块的方法
- input text 的事件及方法
- eclipse 技巧
- springMVC框架下JQuery传递并解析Json数据