流式计算在一些情况下会用到分布式缓存,从而实现(1)想把统计或计算结果保存在分布缓存中。供其他模块或其他系统调用。

(2)某一滑动时间窗体上计数。比如实时统计1小时每一个Cookie的訪问量。实时统计某商品1天内的销售数量和销售额。实时统计某商家1天内的销售量。因为SODBASE CEP引擎本身集成了Redis分布式缓存接口,同一时候在Storm上能够方便地使用SODBASE EPL语句。因此,通过Storm with SQL也就能够方便地使用Redis、在Redis上做滑动窗体了。

1.演示样例操作步骤

功能:实时统计1小时每一个Cookie的訪问量

1.1制作模型文件

本小节对用到的模型文件建模和单元測试,读者假设时间有限,也能够直接进入下一小节

(1)网上下载一个Redis, 建议使用Redis 3.0以上linux版本号,SODBASE CEP已支持与Redis 3.0以上的Redis Cluster集成。

假设认为麻烦想高速把样例跑起来。能够用这个Windows版,解压,默认port6379启动。

(2)下载SODBASE Studio 2.0.22(sp2)版本号以上

下载演示样例CEP模型cookie00.sod、cookie01.sod、cookie02.sod、cookie03.sod

(3)执行SODBASE Studio,导入cookie00.sod、cookie01.sod、cookie02.sod、cookie03.sod

读者能够查看各个模型的EPL语句,和输入输出配置。

cookie00:模拟Cookie实时生成数据,连接到cookie01的输入

cookie01:有两个输出适配器(输出适配器一个重要功能是动作运行),一个加入新数据,一个过期化旧数据,从而在缓存保持10秒滑动窗体。

cookie02:一个输出适配器,查询计数值

cookie03:屏幕输出

(4)将4个EPL模型所有測试执行起来

(5)输出结果

(6)为了在Storm中使用EPL模型,将cookie03的输出配置为storm输出。将cookie01、cookie02、cookie03转化为XML模型文件。cookie00不须要,以下步骤在Storm中写了一个Spout作数据来源。

1.2 编写topology代码

下载最新版演示样例Storm-EPL-Example。解压后导入到Eclipse中。不用maven,依赖的包都在lib目录下,加到build path就可以。

开启redisserver。打开com.sodbase.integration.storm.cookie.CookieSlidingWindowCountTopology.java

Run As->Java Application,就能够在Eclipse中看到输出效果

打包后的jar包能够部署到stormserver上。

注:使用jStorm的读者。配置方法和Storm一致。

在Eclipseproject的lib/storm中使用jstorm依赖的jar包就可以。

2. 工作原理

CookieSlidingWindowCountTopology代码例如以下

package com.sodbase.integration.storm.cookie;
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 CookieSlidingWindowCountTopology { public static void main(String[] args) throws Exception {
TopologyBuilder builder = new TopologyBuilder(); /**
* EPLBolt相关配置
*/
//(1)Bolt的tuple连到EPL哪个流输入上面
String streamname="cookie01.input";
//(2)输出的字段。与EPL输出相应
Fields outputFields = new Fields("CountIn10Sec","cookieid");
//(3)EPL引擎cep home
String cep_home="cep_home";
//(4)EPL模型文件
String[] cepmodelfiles=new String[]{
//update sliding window with redis
"cep_home/files/cookieexample/cookie01.xml",
//count
"cep_home/files/cookieexample/cookie02.xml",
//emit
"cep_home/files/cookieexample/cookie03.xml",
}; builder.setSpout("event", new RandomCookieSpout(), 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学习(四)续:类SQL语言EPL与Storm或jStorm集成-滑动窗体

SODBASE CEP学习进阶篇(七):SODBASE
CEP与Spark streaming集成

SODBASE CEP学习进阶篇(五):与分布式缓存集成

SODBASE CEP用于轻松、高效实施数据监測、监控类、实时交易类项目

EPL语法见SODSQL写法与演示样例

图形化建模请使用SODBASE
Studio

嵌入式方式编程參见执行第一个EPL样例。与Storm集成參见EPL与Storm集成

开发人员社区活动,SODBASE产品的用户如今能够领礼品

SODBASE CEP学习(四)续:类SQL语言EPL与Storm或jStorm集成-使用分布式缓存的更多相关文章

  1. Oracle学习笔记之四,SQL语言入门

    1. SQL语言概述 1.1 SQL语言特点 集合性,SQL可以的高层的数据结构上进行工作,工作时不是单条地处理记录,而对数据进行成组的处理. 统一性,操作任务主要包括:查询数据:插入.修改和删除数据 ...

  2. 数据库系统学习(八)-SQL语言与数据库完整性和安全性

    第八讲 SQL语言与数据库完整性 重难点 数据库完整性的概念 关系数据库 防止和避免数据库中不合理数据的出现 输入错误,操作失误,程序处理错误等 完整性约束条件的一般形式 对O操作集合,当出现A情况时 ...

  3. 数据库系统学习(七)-SQL语言之复杂查询与视图

    第七讲 SQL语言之复杂查询与视图 基本内容 子查询 IN与NOT IN谓词子查询 判断某一表达式的值是否在子查询的结构中 非相关子查询 相关子查询 theta some /theta all谓词子查 ...

  4. 数据库系统学习(六)-SQL语言基本操作

    第六讲 SQL语言概述 基本命名操作 关系代数是集合的思想 关系演算是逻辑的思想(数学公式) SQL-86,SQL-89,SQL-92,SQL-99,SQL-2003,2008...发展过程标准 SQ ...

  5. python3.5.3rc1学习四:类

    class calculator: def add(x,y): return x + y print(added) def sub(x,y): return x - y print(sub) def ...

  6. SQL语言四大类

    SQL语言四大类   SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL. 数据查询语言DQL   数据查询语言DQL基本结构是由SELECT子句, ...

  7. 第四篇:SQL

    前言 确实,关于SQL的学习资料,各类文档在网上到处都是.但它们绝大多数的出发点都局限在旧有关系数据库里,内容近乎千篇一律.而在当今大数据的浪潮下,SQL早就被赋予了新的责任和意义. 本篇中,笔者将结 ...

  8. 数据库SQL语言从入门到精通--Part 1--SQL语言概述

    数据库从入门到精通合集(超详细,学习数据库必看) 一.SQL概述 关系数据库标准语言SQL(结构化查询语言). 结构化查询语言(Structured Query Language)简称SQL,是一种特 ...

  9. 关于SQL语言,这些你不得不了解!

    一.SQL概述 关系数据库标准语言SQL(结构化查询语言). 结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言, ...

随机推荐

  1. Python9-内置函数2-day16

    #zip方法 l = [1,2,3] l2 = ['a','b','c'] l3 = ('*','**',[1,2]) l4 = {'k1':1,'k2':2} for i in zip(l,l2,l ...

  2. CSS布局基础--BFC

    1,什么是BFC BFC(Block Formatting Context)块级格式化上下文,它就是一个环境,HTML元素在这个环境中按照一定规则进行布局.一个环境中的元素不会影响到其他环境中的布局. ...

  3. awk支持多个记录分隔符的写法

    awk的-F参数可以指定新的记录分隔符,有些时候可能需求指定多个分隔符,比如下面的内容 width:720 height:360 如果需要取出width和height后面的值的话,一般大家会这样做,即 ...

  4. kali-xfce的简单配置

    1.更新 设置kali的更新源 在终端中打开sources.list root@kali:~# vim /etc/apt/sources.list 删除里面的注释,清空. 然后输入下面的更新源地址: ...

  5. hdu2046

    递推题目,由于只有一种瓷砖,1*2规格的,所以一块2*2的面积上只能有2种摆放方式,然后就跟上台阶那个差不多,上一步或者上两部. 就是f[n]=f[n-1]+f[n-2]; 另外注意__int64的问 ...

  6. 九度oj 题目1536:树的最小高度

    题目描述: 给定一棵无向树, 我们选择不同的节点作为根节点时,可以得到不同的高度(即树根节点到叶子节点距离的最大值), 现在求这棵树可能的最低高度. 输入: 输入可能包含多个测试案例. 对于每个测试案 ...

  7. iOS学习笔记08-Quartz2D绘图

    一.Quartz2D简单介绍 在iOS中常用的绘图框架就是Quartz2D,Quartz2D是Core Graphics框架的一部分,我们日常开发使用的所有UIKit组件都是由Core Graphic ...

  8. mysql的row_number()实现

    在mysql中没有row_number()方法,这里模拟row_number()实现: 如有表 studentid   name age   class1 张1 15     12 张2 15     ...

  9. [luoguP2606] [ZJOI2010]排列计数(DP)

    传送门 如果能够根据题意看出这是一个堆的话,那么就有些思路了.. 首先堆顶必须是最小元素,然后左右儿子可以预处理出来都有多少个数, 把剩余的数任意分配给两个儿子,用排列组合即可 dp(now) = d ...

  10. 关于java读取文件IO流学习总结(二)

    今天网上随意逛了逛,某处看到关于文件的操作,描述的不错,加深了对于文件操作的理解,在此分享给大家.希望能够有所收获. java读取txt文件内容: 可以作如下理解: 1. 首先获得一个文件句柄.Fil ...