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

这次的Apache Doris (incubating) 0.10.0开发者沙龙在中关村国际会议中心圆满结束,各位嘉宾都带来了干货满满的分享。近期小编会给大家带来精彩的现场回顾和视频录像,敬请期待!

 

 

首先是陈明雨同学代表Doris主创团队带来的关于新版本Doris的介绍和分享。现场录像请见文章最后链接分享。

 

 What’s Doris 

Doris(原百度Palo)是一款基于大规模并行处理技术的分布式SQL 数据库,由百度在2017年开源,2018年进入Apache 孵化器。

拥有以下特点:

高可用,高可靠,高扩展

高度整合的系统,不依赖第三方组件,方便运维

高并发点查询和高吞吐量即席分析

完整的SQL语义支持,内嵌MySQL协议层,方便用户快速迁移现有业务

批量导入和近实时流式导入

预聚合功能,提供快速的查询响应

在线schema change,7*24小时不停服

 

如图展示了Doris的架构,在最小部署的情况下只有两个进程—FE和BE,可以根据需求横向扩展。一般典型的Doris集群由1-3个FE,10-100个BE构成。

其中,FE是由Java编写的,负责节点管理、元数据管理、查询计划生成,还内嵌了MySQL协议层用于接收用户请求;BE是由C++编写的,负责数据存储和查询计划执行。

如果还希望从HDFS读取数据,需要额外部署一个Broker进程,这是一个轻量级的、无状态的数据访问组件。

 

 What’s new in 0.10.0 

 

这次的Doris新版本发布主要带来了五大功能点:

统一的导入框架

支持例行导入功能

通过Doris查询ES的数据

性能优化

易用性改进

接下来便一一为大家展开介绍。

 

功能点一:统一后端导入框架

首先是关于数据的导入方式。老版的Doris主要应用3种导入方式:Broker Load,Mini Load,Streaming Load。

Broker Load通过 broker进程读取外部数据源(如HDFS)进行数据导入;Mini Load是通过http协议进行数据导入。这两种方式都采用了比较老的导入框架(右上)。

由于框架的问题,老版的导入方式受到了很多的限制:

            -受内存大小的限制导致报错

            -多次I/O操作,多次数据传输

            -轮询的方式完成整个任务,效率低,时效性差

Streaming Load框架(右下)将大文件或者数据流,以逐段分批的方式进行加载。

相对之前的导入框架,有许多优点:

            -只有1次I / O和1次数据传输

            -时效性从分钟级提高到秒级甚至毫秒级

            -可以导入任意大文件并保证大文件整体的原子生效

 

为了提升Broker Load和Mini Load的导入性能,0.10.0版本中将老的Broker Load和Mini Load统一到Streaming Load的导入框架中。这样可以利用Streaming Load的框架减少二者在数据导入过程中的I/O次数,提升导入性能。

图以Broker Load为例,新的导入方法既没有内存限制,也可以实现快速导入。并且,在实际使用中依旧保留了用户的使用习惯,使用户可以无感知的切换到这个新的方式。

但是,这种导入方式目前还存在问题,比如在磁盘上可能会产生很多碎文件。这对Doris的后续开发也是一个挑战,以后会逐步优化解决这些问题。

 

 

功能点二:支持例行导入功能

第二点是关于例行导入。实际上,例行导入是在原有底层基础上增加了很多作业调度逻辑,使其可以自动消费指定的数据源,让数据源源不断的导入到Doris。

用户可以通过SQL命令提交例行导入任务。

 

目前Doris只支持从Kafka的例行导入。

支持自动检测Kafka Partition的变化,并且支持数据过滤和变换,提供类似数据清洗的功能。还可以保证Kafka消息的Exactly Once 消费语义,数据不丢不重。通过调整参数,达成了低延迟和高吞吐的需求。目前的导入速度和流式导入的速度是相当的。

 

这是一段创建例行导入的语句,用户根据需求可以自定义这些字段,包括作业名称、DB、表、列的映射关系和转换关系、条件、作业属性以及Kafka属性等等。

 

当用户提交后,可以使用Show查看作业运行状态,另外还提供3种作业控制:停止、暂停、恢复。

 

因为例行导入底层也是使用Streaming Load的导入框架,所以也会出现与它一样的一些问题。除此以外,当前版本仅支持无认证的Kafka访问。以后还会提供更多数据源支持。

 

 

功能点三:Doris与Elasticsearch结合

结束了关于所有导入的问题,来到了第三点,就是Doris和ES的结合。

Elasticsearch是一款实时的分布式搜索引擎,其在全文检索,任意维度组合的点查询方面表现非常优异。但缺点是不支持复杂SQL查询。

而Doris天生是为SQL准备的,更高效的查询优化器和对SQL语义的完整支持,但是也存在自身问题,比如不支持全文检索,对于大宽表的查询效率较低。

基于这样的情况,把他们结合是不错的选择!

 

 

嫁接Doris到Elasticsearch上,可以弥补Doris在全文检索,Geo数据扫描,高维度组合查询方面的劣势;利用Doris的分布式计算框架,也可以补足Elasticsearch在分布式计算(Distributed Aggregation, Distributed Join)方面的欠缺。

使用Scroll API对ES数据访问,整体架构轻量,在FE的内存中维护ES集群上index的元数据信息,定时访问并更新ES信息,在BE节点上访问ES获取数据。这样的框架没有对ES代码进行任何改动,方便后期运维和跟进后期ES发展。只是稍有一点点网络延迟的代价。

 

针对查询效率还做了以下优化:

尽量并行扫shard

提供新的esquery语义

谓词转换和下推,并对查询规划做了改进

 

在查询ES的请求使用参数filter_path,可以减少ES返回的大量冗余的文本字段,进一步减少网络传输

查询条件改写,使用ES的计算能力来减少传输

ES支持的数据类型可以映射到Doris进行查询

 

 

功能点四:性能优化

Apache Doris 0.10.0版本中,除了丰富导入功能,扩展使用场景外,针对查询性能,也做了大量工作。第四点也就是关于这次Doris的优化,主要分为两点:

优化Decimal类型的实现。采用定长的16字节(128位)存储decimal;对比此前的变长数组的存储方案,在计算性能上提升非常明显。

由美团同学贡献的Plan Fragment并发执行。根据扫描数据量,动态切分扫描任务,并发扫描文件,有效利用空闲CPU/IO资源,速度可以有3-5倍的提升。

 

 

功能点五:易用性提升

最后一点是易用性的提升。

支持UDF,用户可通过C++语句编写udf。

由搜狐同学贡献, 新增hll_raw_agg函数,支持在窗口函数中使用hll_union_agg

新增20+metrics监控项,协助用户更好洞察集群内部状态

新增一些指标和参数,便于后期运维

修复30+ bug,提升系统稳定性

 

 

 What’s Next 

 

新版本的Doris的内容就分享到这儿,那么接下来百度团队对Doris后续工作还在继续。

支持bitmap索引,解决在大宽表上任意维度查询效率差的问题

Cascades模型基于代价的优化器

改变整体系统架构来更好的面向cloud native的场景,存储和计算分离,为云上产品提供更好的弹性和更低的价格

关注社区发展,做文档框架,方便用户使用和开发

 

 

现场录像指路⬇️

百度网盘:

https://pan.baidu.com/s/1N6kIHVmk1vbHyZns_ZpL2Q 

提取码: crah 

有关其他嘉宾的详细分享内容会陆续发出,敬请期待。欢迎关注Apache Doris官方公众号!

 

 

相关链接:

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

本文分享自微信公众号 - ApacheDoris(gh_80d448709a68)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

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