阅读更多
StreamCQL是一个类SQL的声明式语言,它用于在流(streams)和可更新关系(updatable relation)上的可持续查询,目的是在流处理平台分布式计算能力之上,通过使用简易通用的类SQL语言,使得业务逻辑的开发变得统一和简易。在功能上,StreamCQL弥补了传统流处理平台上一些基本业务功能的缺失,除了过滤、转换等基本SQL能力之外, 还引入基于内存窗口的计算、统计、关联等能力,以及流数据的拆分、合并等功能。

StreamCQL重要概念介绍
  • 流:流是一组(无穷)元素的集合,流上的每个元素都属于同一个schema;每个元素都和逻辑时间有关;即流包含了元组和时间的双重属性。流上的任何一个元素,都可以用Element<tuple, Time>的方式来表示,tuple是元组,包含了数据结构和数据内容,Time就是该数据的逻辑时间。
  • Window:窗口(window)是流处理中解决事件的无边界(unbounded)及流动性的一种重要手段,把事件流在某一时刻变成静态的视图,以便进行类似数据库表的各种查询操作。在stream上可以定义window,窗口有两种类型,时间窗口(time-based)和记录窗口(row-based)。两种窗口都支持两种模式,滑动(slide)和跳动(tumble)。
  • 算子:算子是包含了一系列运算关系的组合,比如聚合算子,就包含了查询(select),窗口,聚合(aggregate),排序(sort),窗口前过滤(filter before window),窗口之后的过滤(where),聚合之后的过滤(having)等功能,除此之外,还有流拆分算子,流合并算子等。StreamCQL中的算子分为三类:输入算子、输出算子、功能算子。

StreamCQL架构介绍

StreamCQL总体架构如下图所示:

图1 StreamCQL架构图


StreamCQL的总体架构分为引擎、功能、业务接口三层,每隔层次之间分工明确,责任清晰,可以轻易进行功能拓展。

1. 引擎

StreamCQL的引擎层,可以适配各种不同的流处理引擎,比如Flink等,目前主要适配Storm。

引擎层的作用在于完成完成对各类算子对底层不同流处理引擎的接口适配、拓扑的构建、提交查看删除等操作。

以Storm适配为例,在Storm中,对外接口分为Spout和Bolt,其中,Spout就对应输入算子,Bolt对应输出算子和功能算子;StreamCQL中所有操作是以算子为单位的,各类运算都发生在不同的算子内部。算子分为输入算子、输出算子和功能算子,在Storm适配层中,就包含输入算子对Spout的适配,输出算子和功能算子对Bolt的适配,以及emit的适配,topology builder的适配。只要通过几百行代码就可以完成对Storm引擎的适配工作。

StreamCQL引擎层和Streaming的对外接口如下图所示:



图2 StreamCQL底层解耦架构


StreamCQL在Storm自身的IRichSpout,IRichBolt接口基础上,实现了StormSpout、StormBolt和StormOutputBolt来屏蔽底层不同引擎带来的接口变更。

StreamApapter是一个适配器,主要作用就是将Streaming算子注入到Spout和Bolt中。

IInputStreamOperator、IFunctionStreamOperator和IOutputStreamOperator是所有的输入输出和功能性算子的接口,同用户自定义接口一致。

该架构使用依赖注入的原则,实现了各个每个层级算子之间的解耦。

2. 功能

功能层以Stream和Window为基础,构建出了Join,Aggregate等算子。

Stream即流,该功能构建出了整个流处理平台数据流的基础。定义了数据流动、解析和分发规则。

Window:window是流上一段时间内数据的集合。StreamCQL上绝大部分的计算,都是基于窗口的。

流和窗口构成了整个流处理平台的核心。

StreamCQL功能层的算子包含Join算子、Aggregate算子、Split算子、Merge算子、Functor算子、filter算子、union算子、输入算子和输出算子,模式匹配算子目前暂时没有实现。

Join算子提供的功能类似关系型数据库的Join功能。目前StreamCQL支持的Join类型包含Inner Join,Left (outer) Join,Right (outer) Join,Full (outer) Join ,Cross Join四种类型。目前只支持双流Join。由于流的特殊性,Join的时候,两个流的数据都是在不断发生变化的,所以两个流任何一个流的数据变化,都会触发Join操作。如果只想让某个流触发Join,那么就应该使用UNIDIRECTION关键字。



图3 双流Join示例


下表时当有数据流动的时候,双向Join的输出举例。



图4 双流Join结果示例




图5 双流Join单流触发Join示例




图6 双流Join单流触发Join数据示例


Filter算子适合只有单纯数据过滤的简单场景,不支持任何其他列转换运算,不支持窗口。

Functor算子在Filter算子的基础上 添加了列转换运算,支持Select子句运算。

Aggregate算子是一个大而全的算子,在Functor的基础上,添加了窗口功能,并支持分组,聚合,窗口前过滤,窗口后过滤,聚合后过滤(having),排序功能。



图7 aggregate聚合算子内部关系说明


Split算子的主要作用在于完成单个流到多个流的拆分,支持每个流输出不同数据。

图8 Split算子示例




图9 Split算子输出举例


Merge算子作用正好和Split算子相反,支持多流到单个流的合并。Merge算子要求每个流都有一个字段和其他流中的一个字段匹配,这样才会合并做同一条数据。类似关系型数据库中的多留等值Join。



图10 Merge算子示例




图11 Merge算子数据输出示例

Union算子在CQL语法层面不支持,但是在CQL内部,会自动将满足条件的算子优化为Union算子。Union算子不支持任何过滤查询运算,只是简单进行流合并。

Input和output算子是单纯的输入和输出算子,其中包含数据的读取,写入,序列化、反序列化功能。

3. 业务接口

StreamCQL的业务接口构建在Storm所有功能之上,分为CQL和IDE,其中IDE指的是类似Eclipse的开发IDE,这种IDE以功能层各类算子和窗口为基础,可以很容易进行拖拉拽等流拓扑开发;IDE功能目前还没有实现。

CQL指的是CQL的语法,包含语法定义,语法解析,语义分析,流抽象拓扑构建等功能。CQL对StreamCQL对外功能展示的入口。相关CQL语法设计和对外拓展接口可以在Github上查看语法手册。

StreamCQL Github地址:https://github.com/HuaweiBigData/StreamCQL
  • 大小: 50.7 KB
  • 大小: 71.8 KB
  • 大小: 59.1 KB
  • 大小: 55.5 KB
  • 大小: 66.5 KB
  • 大小: 44.9 KB
  • 大小: 25.3 KB
  • 大小: 41.8 KB
  • 大小: 49.7 KB
  • 大小: 18.4 KB
  • 大小: 28.6 KB
1
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 华为云网站解析配置流程

    要在 Internet 上通过域名访问自己的网站时,可以通过华为云的云解析服务为域名添加解析记录。 例如,搭建一个网站服务器,采用 IPv4 格式的弹性 IP 地址。如果想要实现通过域名 “example.com” 及其子域名 ...

  • 最新版华为HCNP题库-2016-9-带解析版

    最新版华为HCNP题库-2016-9-带解析版

  • 华为开源框架

    世界 500 强的华为,旗下设有华为开源软件能力中心。是基于华为开源战略新成立的部门。承担开源新技术扫描与规划、开源技术研究、开源开发方法探索、开源社区运营和开源能力构建及管理等相关工作。本期,就为大家...

  • 华为开源深度学习框架MindSpore背后的商业野心

    最近华为开源了深度学习框架MindSpore,一时成为了热点。我之前也点评了很多微软、Google、腾讯等厂商的框架,有些点评文章还被官方社区收录,今天为大家解析下MindSpore。 首先阐明下我个人的观点,华为开源深度...

  • 华为开源的深度学习框架 MindSpore

    点击蓝字关注我们扫码关注我们公众号: 计算机视觉战队扫码回复:华为开源,获取下载链接作者:杨军来源:知乎纯技术讨论,不涉及其他,部分我拿不准的地方,会直接以(?)标识出来,欢迎菊花厂同...

  • 华为手机安装GMS框架

    HUAGU华为手机安装GMS框架-Android文档类资源-CSDN下载 1.升级鸿蒙系统至最新版 2.关闭手机纯净模式 3.打开开发者模式,连点七次版本号,然后进入系统更新就能看到开发者模式 4.打开图片这三个选项 ...

  • 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单

    华为 OD 先整体了解一下OD,全称(Outsourcing Dispacth)模式,目前华为和德科联合招聘的简称。华为社招大多数是 OD 招聘,17 级以下都为 OD 模式。OD 模式也是华为提出的一种新的用工形式,定级是 13-17 级,属华为...

  • 开源生态红似火 华为引领中国力量显峥嵘

    当Richard Stallman发起开源运动之时,他恐怕不曾想到开源能够给今日的世界带来如此巨大和深远的变化。开源的开放、共享以及大家齐心协力共同向着同一目标努力奋进的精神,如今已经成为人类共同的精神财富,激励着...

  • 华为安装gsm框架_华为手机怎么安装 GMS 框架和谷歌应用?

    展开全部华为手机gms谷歌框架安装方法,若是帮你解决了62616964757a686964616fe4b893e5b19e31333433623135,记得采纳哦!第一步:准备安装文件1、下载安装包Huawei.zip至手机(可以去搜索:华为GMS谷歌安装方法,纯...

  • 华为开源操作系统鸿蒙开源地址链接

     华为开源操作系统鸿蒙开源地址链接: 华为开发资源: https://developer.huaweicloud.com/ 华为终端开发者论坛: https://developer.huawei.com/consumer/cn/forumupgrading 华为系统liteOS老地址:...

  • 华为开源野心与布局

    华为开源野心与布局1、方舟编译器2、鸿蒙操作系统3、开源可能并非无国界4、美国开源的出口管制一、Linux 基金会自身的管理办法不受美国出口管制,所以旗下的项目包括 Linux Kernel 等默认遵循该管理办法,但虚拟化...

  • 华为资深工程师带你了解华为七大根技术

    根技术是技术树之根,持续为整个技术树提供着滋养,决定着企业的荣枯。华为技术有限公司聚焦根技术创新,在极限施压下,立根铸魂、为国铸剑。在第六个全国科技工作者日,带你了解华为七大根技术。

  • 华为认证HCIA+HCIP题库(超500题含答案解析)

    全网最良心题库解析版

  • 华为云-公有云架构

    华为公有云架构 华为公有云的主要服务如弹性云服务器(ECS)、弹性伸缩服务(AS)、云硬盘 (EVS)、云硬盘备份(VBS)、对象存储服务(OBS) 、虚拟私有云(VPC)、弹性负 载均衡(ELB)、Anti-DDOS流量清洗、云...

  • 华为正式开源数据虚拟化引擎 openLooKeng

    近日,华为正式宣布开源数据虚拟化引擎 openLooKeng,开源社区官网同步上线。openLooKeng 致力于为大数据用户提供极简的数据分析体验,让用户像使用“数据库”一样使用“大数据”。 2019 年 11 月 19 日,华为宣布...

  • 【Web后端架构】2022年10个最佳Web开发后端框架

    这些都是2022年在Java、Ruby、Python、JavaScript、PHP、Scala和Golang中进行web开发的最佳后端开发框架在本文中,我将与您分享创建web应用程序的10个最好的后端框架。Web开发通常分为两类:前端开发和后端开发。...

  • 华为开源操作系统-鸿蒙开源地址链接

    华为开源操作系统鸿蒙开源地址链接: 华为开发资源: https://developer.huaweicloud.com/ 华为终端开发者论坛: https://developer.huawei.com/consumer/cn/forumupgrading 华为系统liteOS老地址:...

  • 唯快不破 - 华为快应用架构与开发介绍

    快应用是一种新型的应用形态,能够... 本讲座将深入浅出的介绍快应用(包括快游戏)应用场景、功能特性、背后的架构设计思路&amp;优势,以及下一步计划,希望能带给听众一个快应用的全貌,知其然,同时也知其所以然。

  • 【java毕业设计】智慧社区教育服务门户.zip

    有java环境就可以运行起来 ,zip里包含源码+论文+PPT, 系统设计与功能: 文档详细描述了系统的后台管理功能,包括系统管理模块、新闻资讯管理模块、公告管理模块、社区影院管理模块、会员上传下载管理模块以及留言管理模块。 系统管理模块:允许管理员重新设置密码,记录登录日志,确保系统安全。 新闻资讯管理模块:实现新闻资讯的添加、删除、修改,确保主页新闻部分始终显示最新的文章。 公告管理模块:类似于新闻资讯管理,但专注于主页公告的后台管理。 社区影院管理模块:管理所有视频的添加、删除、修改,包括影片名、导演、主演、片长等信息。 会员上传下载管理模块:审核与删除会员上传的文件。 留言管理模块:回复与删除所有留言,确保系统内的留言得到及时处理。 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上

Global site tag (gtag.js) - Google Analytics