6.29线下开发者沙龙分享--Doris主创团队
三寸九州 发布于2021-04 浏览:3133 回复:0
0
收藏

6月29日,Doris有幸得到中国信通院云大所、大数据技术标准推进委员会的支持,在中国信通院举行了0.11.0新版本预览线下沙龙。各位嘉宾都带来了干货满满的分享。关注Doris官方公众号,后台回复“0629”即可获取各位嘉宾分享PPT及现场录像。

 

 

今天是李超勇同学代表Doirs主创团队带来的关于Apache Doris (incubating) 0.11.0 版本的功能预览。

 

 

 

本次Doris带来了如下更新:

存储引擎的重构与优化

打通Spark和Doris

SQL支持Grouping Sets语法

支持读取Parquet文件格式

新增空间几何函数

 

下面将为大家具体进行介绍。

 

 

存储引擎的重构与优化

 

 

 

Doris存储引擎历经几代人的修改演进,功能丰富的同时,也积攒了不少历史沉疴,代码结构臃肿、晦涩,逻辑层次不清,维护工程十分浩大。鉴于此目的,Doris在0.11中对存储引擎进行了大规模重构,重新组织了各个功能模块,以及各个对外交互的接口。新的引擎将为后续存储计算分离,以及相关引擎优化打下良好的基础。

 

存储引擎重构重构的背景可以简单描述如下:

命名混乱,言不达意。例如大面积地出现table,tablet混用的情况,令人疑惑。

代码封装层次混乱,相互之间大量耦合,不易于阅读与维护。

锁缺乏统一的调度管理机制,难以有效避免死锁、锁泄漏等情况的发生。

 

 

 

本次重构目标是Apache Doris的单机存储引擎,单机存储引擎的主要任务有:

 

维护所有的tablet信息,包括tablet的状态,数据等。

调度和tablet相关的操作,包括create table/load/compaction/clone/schemachange等操作,以及操作之间的相互并发。

处理和tablet相关的异常,包括操作本身的异常,以及文件系统异常。

汇报引擎的状态信息给FE,保持和FE之间的心跳连接。

 

为完成上述任务,本轮重构重新组织划分了存储引擎各个模块,如上图所示。

 

最上层打算提供统一的Service层作为单机引擎的入口,调度执行各类操作。

中间是存储引擎内部数据与状态的管理。包括tablet管理,rowset管理,事务管理等。

最下层是文件系统适配层及元数据系统层。目前Doris只支持posix文件接口,后续上云可以扩展其他文件接口。

贯穿的错误处理机制。存储引擎总是面临着各类错误,包括I/O Error, File System Error等,不论在哪个层次之中发生错误,皆需要进行错误处理。为统一所有的错误处理逻辑,Doris提供统一的错误队列,贯穿各个层次,接收错误信息,触发错误处理机制。

 

 

对于存储引擎而言,最重要的操作就是读和写,compaction/clone/schemachange都架构在读写流程之上,看懂读写也就看懂了存储引擎。这里着重介绍重构之后的读取逻辑,写基本可以认为是读的对称映像。

 

Doris 0.11启用Iterator机制抽象从Column,到Segment,到Rowset的读取。在Rowset模块之上再根据读取的不同需求,提供Merge/Union Iterator。通过这样的层次,十分清晰地描绘了整个读取逻辑, 能以更加高效简单的方式读取不同版本的数据。

 

 

打通Spark和Doris

 

 

 

 

打通Apache Spark和Doris主要原因是为了统一数据分析和数据仓库,简化整个数据流向,尤其是简化云上各个产品之间的数据流向。Doris 0.11目前只支持Spark读取Doris的数据,后续会实现Spark直接离线生成Doris的存储文件,将读写都与Spark打通。

 

 

 

具体架构如上图。

 

左边是Spark的架构,右边是Doris的架构,箭头代表数据的流向。首先Spark会从Doris的FE里获取元数据、表的schema信息及表的位置。其次会调取be节点拉取数据,之后即可应用Spark进行大规模离线计算。

 

 

 

SQL支持Grouping Sets语法

 

 

 

 

Grouping Sets属于Group By的扩展,扩展了Group By的分组集合的能力。

 

经常对数据进行聚合分析的用户,可能面临着如下的场景,既需要对A列做聚合,也要对B列做聚合,同时要按照A,B两列一起做聚合。

 

没有Grouping Sets之前,业务方需要在单个SQL中写三个UNION ALL语句才能完成此项功能,而使用Grouping Sets则可以非常快速方便地解决此类问题。Grouping Sets之上,Doris 0.11也同步支持了CUBE,ROLLUP等Grouping Sets的语句扩展,更好地满足业务方进行各类聚合分析的需求。

 

 

支持读取Parquet文件格式

 

 

 

 

Apache Parquet是Hadoop生态之中被广泛应用的列式存储格式,具有读写性能优异、压缩比高等特点。Doris数据导入之前只支持CSV的文本格式,对于HDFS上的Parquet文件加载,需要强制用户先转成文本格式,费时费力。

 

在搜狐同学的贡献之下,Doris0.11版本之中,集成了Parquet的读取逻辑,用以读取Parquet文件。Parquet读取功能的整体架构如图。通过在Doris Broker中引入Apache Arrow,通过Arrow读取Parquet文件,然后在加载入Doris之中。

 

 

新增空间几何函数

 

 

 

 

物联网场景中,除了需要查看全局的指标统计结果外,还需要能够对区域网格(主要是圆形区域和多边形区域)进行统计,也需要对具体坐标点附近数据进行探索的能力。如此这般,才能从空间维度上实现从整体,到任意局部,到任意个体的展示效果。Doris 0.11中新增空间几何函数,对经纬度所形成的区域网格进行处理。

 

例如图上这个例子,想要去查询距离某个点最近的5个poi id,即是这类型的查询需求。

 

 

 

此次沙龙我们有幸邀请到了来自一点资讯、京东、搜狐、百度智能云的技术大牛带来他们的应用实践和开发分享。

 

其他嘉宾的分享会在近日放出,欢迎关注Apache Doris (incubating)官方公众号,后台回复“0629”即可获取各位嘉宾分享PPT及现场录像。

 

 

欢迎扫码关注:

Apache Doris(incubating)官方公众号

 

相关链接:

Apache Doris官方网站:

http://doris.incubator.apache.org

Apache Doris Github:

https://github.com/apache/incubator-doris

Apache Doris Wiki:

https://github.com/apache/incubator-doris/wiki

Apache Doris 开发者邮件组:

dev@doris.apache.org

收藏
点赞
0
个赞
快速回复
TOP
切换版块