开发者学堂课程【分布式入门计算:StreamSQL】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/375/detail/4704
StreamSQL
内容介绍
一、StreamSQL
二、StreamSQL-DDL
三、StreamSQL-demo
一、StreamSQL
1. StreamSQL 是在阿里云官网上面开放的一款用 sql 去编写流计
算的一种产品,机构分为四成:
SQL (+ udf)
算子 API
Map/Reduce/Merge API
process API
最底层是 process API 的编程接口,再往上,提供了一层map/reduce/merge 的接口,在上面建造了算子的 API,跟数据库的物理执行计划十分类似,再往上支持 sql 语法,从上往下再看,通过把 sql 集齐语法术,变成逻辑执行计划,然后再根据系统原数据解析成物理执行计划,翻译到算子 API。从上往下表达能力增强,从下往上应用性增强。
2.算子原语
Map,Reduce,Shuflle,Union,Merge
算子原语之上可以实现高级算子
高级算子:Topk,distinct,Join,_windows
是对应的系统实现如下图:
3.基本数据类型
类型 语法
数据类型 INT, BIGINT/LONG, DOUBLE, STRING, OBJECT
TABLE类型 STREAM, RESULT, TMP, DIM
DDL CREATE TABLE
DML INSERT INTO
SELECT子句 SELECT FROM,WHERE,GROUP BY,DISTRIBUTE BY,UNION ALL,JOIN/LEFT,OUTER JOIN,TOP n ORDER BY ASC/DESC PARTITION BY
其他 ADD JAR,FUNCTION, UDF, UDTF, UDAF
二、StreamSQL-DDL
可分为四种表:源表(stream table)、结果表(result table)
、维表(dim table):用于关联( join )操作,支持全部加载内存、临时表(tmp table):连接复杂SQL。
1.源表(stream table)
定义输入数据的schema
指定数据源和参数
CREATE STREAM TABLE source_ from_ tt (
a string,
b double,
c bigint,
) WITH (
input. type=' tt',
timetunnel. logname=' aplus' ,
timetunnel. subid= 'xxx’,
…
);
2.结果表(result table)
定义输出数据的schema
指定数据输出系统和参数
CREATE RESULT TABLE result_ into hbase(
auction_ id string
,ali_ fee string
, ali_ cnt string
,ali_ amt string
, primary key (auction_ id)
) WITH{
output. type='/hbase',
hbase. zookeeper. quorum=‘ xxx',
zokeeper. znode. parent=' /hbase' ,
galaxy. output. hbase. family=i
);
三、StreamSQL-demo
对应SQL:
select t.a, t.b, t.c from tmpTable1 t where t.c>1
Union all
select t.a, t.b, sum(t.c) from tmpTable1 t
where t.c> 10 group by t.a,t.b;
用户通过自定义函数算子实现计算逻辑
InputStream tmp = source.read();
Stream tmp1 = tmp.filter(new CGreaterThan(1);
Stream tmp2 = tmp.filter(new CGreaterThan(10))
.keyBy(MapFns.ExtractKeys(0, 1))
.groupByKey()
.merge(ColumnUDAFs SUM DOUBLE(2))
.values();
Stream res = tmp1.union(tmp2);
整个的系统架构如图所示,主要分成四大块:
第一块 galaxy 端,是用户使用系统的接入端。第二块是resouce manager,是由飞天伏羲组件来完成,最右边是由am作摆放测件,最左边是 jobma,作为运行时控制,最底下是在物理机上运行的 worker 部分,这么一组节点可以线性扩展,
最后存在一个问题,几种异构任务类型之间,无法做任务之间的数据复用,就完成业务,各种计算模型,多个系统的融合,系统之间也无法共享数据,因为这些系统内部都不知道彼此的存在,为云数据大计算,现在的离线系统与在线的鸿沟依然明显。
试图从并串型 DAG,Shuffle service,Push/pull ,任务跟踪方式,是否提前拉起进程,来重新审视计算,进而去关注内存计算,怎么叫做内存计算,Batch引入所带来的问题,并行 DAG ,增量模型,离线与在线的鸿沟,离线所有的任务都走,会给整个内存的存储带来很大的问题,面向吞吐和明显延时的系统,如何互相借鉴甚至整合,都会在未来带来非常大的挑战。