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产品的用户现在可以领礼品啦 

0 0
原创粉丝点击