SODBASE CEP学习(四)续:类SQL语言EPL与Storm或jStorm集成-滑动窗口

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 count
FROM se:timer1;data:userinput;ee:timer2
PATTERN 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值