一,什么是 StreamCQL
StreamCQL(Stream Continuous Query Language)是一个类似SQL的声明式语言, 目的是在流计算平台(目前也就是jstrom)的基础之上提供简单易用的类SQL语言,从而能够降低开发人员开发流计算拓扑的门槛,使得相关拓扑任务的开发人员能够不用把精力耗费在如何编写实时任务的本身的技术之上,而是可以投入更多精力在实时任务的业务逻辑实现上.
 
二,StreamCQL的一些概念
1.流:
流是一组(无穷)元素的集合,流上的每个元素都属于同一个schema;每个元素都和逻辑时间有关;即流包含了元组和时间的双重属性。
流上的任何一个元素,都可以用Element<tuple,Time>的方式来表示,tuple是元组,包含了数据结构和数据内容,Time就是该数据的逻辑时间。
 
2.窗口:
窗口(window)是流处理中解决事件的无边界(unbounded)及流动性的一种重要手段,把事件流在某一时刻变成静态的视图,以便进行类似数据库表的各种查询操作。
在stream上可以定义window,窗口有两种类型,时间窗口(time-based)和记录窗口(row-based)。两种窗口都支持两种模式,滑动(slide)和跳动(tumble)。
 
3.表达式:
符号和运算符的一种组合,CQL解析引擎处理该组合以获取单个值。简单表达式可以是常量、变量或者函数,可以用运算符将两个或者多个简单表达式联合起来构成更复杂的表达式。
 
三.StreamCQL的编写流程
1.CQL语句式是以应用程序作为一个整体运行的,一个submit命令代表的是一整个应用程序的结束.
2.一个应用程序中可以包含 用户自定义参数,文件,jar包,函数等,还必须包含至少一个输入流,输出流和数据计算语句.
3.CQL语句并不严格要求各个不同语句的提交顺序,但是用户必须保证流(或者函数,参数等)在使用之前被定义.
 
下面为一个具体用例:
 
--输入流
CREATE INPUT STREAM s1
(name STRING,count INT)
SOURCE KafkaInput
PROPERTIES("zookeepers" ="192.168.1.1:2181","prefix"="/meta","topic"="input_test","groupId"="kafkaConsumer1");
 
--输出流
CREATE OUTPUT STREAM s2
(name2 STRING,count2 INT)
SOURCE KafkaOutput
PROPERTIES("zookeepers" ="192.168.1.1:2181","prefix"="/meta","topic"="output_test");
 
--查询语句
INSERT INTO STREAM s2 SELECT name as name2,sum(count) as count2 FROM s1[RANGE 60 SECONDS BATCH] GROUP BY name;
 
--命令语句
SUBMIT APPLICATION demo1;
 
 
四 ,StreamCQL的数据类型
StreamCQL支持 十一种数据类型,和java的数据类型基本一一对应
 

 
cql的数据类型一般使用在 输入/输出语句定义上,cql生成的拓扑任务代码中会将对应的数据转换为指定的数据类型.
 
五,StreamCQL的语法
下面,我们会详细介绍之前的代码用例
首先我们的用例比较简单,就是从 kafka中读取数据,数据格式为jason字符串(我们默认使用json的数据解析器),然后以60秒为一个窗口进行数据统计,然后将统计结果写入kafka的另外一个topic进行输出.
 
1) 首先,我们先创建一个输入流, 我们要进行计算的数据是从这个输入流获取的.
CREATE INPUT STREAM s1 //在这里指定输入流的名称 ,也就是 s1
(name STRING,count INT) //指定输入的数据流的字段以及类型,因为我们默认使用的json解析器,所以 数据文本类似 {"name":"xxxx","count":123}
SOURCE KafkaInput //指定数据源,我们这里也就是指定是kafka的输入源(需要注意一下,这里的kafka数据源是我们自定义的,所以和官网原版的属性有些区别,但这个不会影响我们分析代码)
PROPERTIES("zookeepers" ="192.168.1.1:2181","prefix"="/meta","topic"="input_test","groupId"="kafkaConsumer1");//设置 kafka的一些属性
 
2)然后,我们可以创建输出流,用来输出计算的结果,数据的序列化方式我们默认为json
CREATE OUTPUT STREAM s2 //在这里指定输出流的名称 ,也就是 s2
(name2 STRING,count2 INT) //指定输入的数据流的字段以及类型
SOURCE KafkaOutput //指定输出流的数据源类型为kafka
PROPERTIES("zookeepers" ="192.168.1.1:2181","prefix"="/meta","topic"="output_test");
 
3) 再然后,就是进行 任务的实时计算逻辑
INSERT INTO STREAM s2 SELECT name as name2,sum(count) as count2 FROM s1[RANGE 60 SECONDS BATCH] GROUP BY name;
上面一个语句的逻辑就是 从 输入流 s1 中 读取 name 和 count ,然后以 60秒 的长度为时间窗口长度 , 对这六十秒时间窗口内相同 name字段的count值进行求和,然后将统计结果 输出给 输出流s2
 
4) 最后,我们提交这个拓扑任务
SUBMIT APPLICATION demo1; //拓扑任务名为 demo1
执行完这句话 ,我们才会对上面的 cql语句进行解析和生成拓扑任务并提交到jstorm集群.
 
 
 
 
 
 
 
 

StreamCQL编写jstorm拓扑任务入门的更多相关文章

  1. HDU 1285 经典拓扑排序入门题

    确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  2. (转)在 vue-cli 脚手架中引用 jQuery、bootstrap 以及使用 sass、less 编写 css [vue-cli配置入门]

    写在前面: 本文是vue-手摸手教你使用vue-cli脚手架-详细步骤图文解析之后,又一篇关于vue-cli脚手架配置相关的文章,因为有些文章步骤不够清晰,当时我引入JQuery.bootstrap的 ...

  3. 拓扑排序入门详解&&Educational Codeforces Round 72 (Rated for Div. 2)-----D

    https://codeforces.com/contest/1217 D:给定一个有向图,给图染色,使图中的环不只由一种颜色构成,输出每一条边的颜色 不成环的边全部用1染色 ps:最后输出需要注意, ...

  4. POJ 2367 Genealogical tree 拓扑排序入门题

    Genealogical tree Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8003   Accepted: 5184 ...

  5. poj 2367 拓扑排序入门

    Description The system of Martians' blood relations is confusing enough. Actually, Martians bud when ...

  6. 【转载】ubuntu下编写字符设备驱动程序-入门篇

    在ubuntu初学驱动,觉得挺有用的. http://www.eefocus.com/jefby1990/blog/13-02/291628_c39b8.html

  7. Matlab(3) -- 编写M文件(函数)

    转自:http://blog.csdn.net/misskissc/article/details/8178089 matlab的命令编辑窗口(Command Window)界面主要是用来调用系统命令 ...

  8. Xamarin.Android之UI Test简单入门

    一.前言 相信Xamarin免费之后会有更多的人加入进来,这也是我一直以来最希望看到的事,更多的人加入到这个社区中,为这个社区贡献自己的一份力量,国内当前还没有一个比较正规或者说是名气比较大的Xama ...

  9. [书目20160624]Android应用开发从入门到精通

    卢海东 著 第1章 揭开神秘面纱——Android系统简介 1   1.1 认识Android系统 2   1.1.1 Android成长历程 2   1.1.2 发行版本 3   1.1.3 得到大 ...

随机推荐

  1. [Asp.Net Core] 1. IIS中的 Asp.Net Core 和 dotnet watch

    在基于传统的.NET Framework的Asp.Net Mvc的时候,本地开发环境中可以在IIS中建立一个站点,可以直接把站点的目录指向asp.net mvc的项目的根目录.然后build一下就可以 ...

  2. 2017计算机学科夏令营上机考试-B编码字符串

    B:编码字符串 总时间限制:  1000ms 内存限制:  65536kB 描述 在数据压缩中,一个常用的方法是行程长度编码压缩.对于一个待压缩的字符串,我们可以依次记录每个字符及重复的次数.例如,待 ...

  3. 【epub.js|翻译|原创】开源中间件epub.js的使用及其中文文档

    epub是最流行的电子书规范之一,网络上对于Java Web有不少合适的方法来解析和呈现,但是关于epub.js的介绍比较少(尽管github上已经2K星了),更多的是概念性的内容,如: epub.j ...

  4. scrapy初试水 day03(递归调用)

    import scrapyfrom scrapy.http import Requestfrom scrapy.spider import Rulefrom scrapy.linkextractors ...

  5. javascript中break,continue和return语句用法小结:

    Break语句会使程序立刻退出包含在最底层的循环或者退出一个switch语句,它是用来退出循环或者switch语句. 例如: <script type="text/javascript ...

  6. 基于TCP协议的socket编程

    什么是socket Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面, ...

  7. swiper3插件无缝滚动配置

    <html> <head> <link rel="stylesheet" href="https://cdn.bootcss.com/Swi ...

  8. 【JDK1.8】JDK1.8集合源码阅读——IdentityHashMap

    一.前言 今天我们来看一下本次集合源码阅读里的最后一个Map--IdentityHashMap.这个Map之所以放在最后是因为它用到的情况最少,也相较于其他的map来说比较特殊.就笔者来说,到目前为止 ...

  9. Linux基础学习笔记以及常用命令

    1.windows自带命令进入mysql所在磁盘   2.进入mysql安装目录的bin文件 D:\>cd D:\Program Files (x86)\mysql-5.5.25-winx64\ ...

  10. loadrunner 录制TCP协议脚本操作

    测试TCP协议的项目,涉及到登陆.发送实时数据.指令.登出等,直接写报文工作量太大,所以需要录制报文. 操作方法如下: 1.启动服务端程序 2.使用winsocket协议 3.选择应用程序 4.录制选 ...