Apache Doris 极速数据湖分析技术细节公开!


Apache Doris 极速数据湖分析技术细节公开!

文章插图
一、Doris 简介什么是 Apache Doris?简单来说,Doris 是一款基于 MPP 架构的高性能实时的分析型数据库 。
 
Apache Doris 极速数据湖分析技术细节公开!

文章插图
 
下图是 Doris 的发展历程 。最早可以追溯到 2013 年 。
 
Apache Doris 极速数据湖分析技术细节公开!

文章插图
 
它是百度内部自研的一个多维分析平台 。经过了几年在百度内部大规模的应用和实践,2017 年的时候,正式开源到 Github 上 。在 2018 年 Doris 进入到 Apache 孵化器,在孵化的过程中,不断发展社区,培养用户和开发者 。到目前为止,在孵化期内发布了七个重要的版本,每月的活跃开发者接近一百位 。在 2022 年,Doris 从 Apache 孵化器毕业,成为一个顶级项目 。成为顶级项目之后,我们也快速的推动社区的发展 。在 2022 年 12 月份发布了 Doris 1.2.0 版本 。这一版本中有很多重要功能更新 。其中很重要的一部分就是对数据服务能力的优化和支持 。这也是本次分享的重点 。
下图中可以看到 Doris 在整个数据流中的定位:
 
Apache Doris 极速数据湖分析技术细节公开!

文章插图
 
它的上游有一些 OLTP 系统,日志系统,埋点系统 。经过一些流处理或者说批处理,比如 Sparquet,Hive,Flink 等等 。经过加工和处理之后,会把处理后的结构化数据存储在 Doris 中 。Doris 本身是一个拥有完备 MPP 架构的数据仓库 。它可以直接对外提供报表分析、信息查询,以及数据库分析等功能 。同时它也可以作为一个 SQL 引擎,对外部的数据源进行查询加速,包括 Hive,Iceberg,Hudi 等等 。也支持 MySQL,ElectricSearch 等外部数据源 。同时,也提供了官方的 Flink Connector 和 Spark Connector 。用户可以通过这两类 Connector,方便的去把 Doris 存储中的数据和其它数据源的数据进行联邦分析查询,保证 Doris 最终的数据不会成为数据孤岛 。
这就是 Doris 在整个数据流中的定位,以及它是如何在企业数据流中发挥价值的 。
二、Doris 数据湖分析内幕接下来进入本文的重点,也就是 Doris 的数据湖分析内幕 。
先来讲一下什么叫数据湖分析 。其实 Doris 本身是一套完备的数据库管理系统,包括查询层和存储层 。在我们正常使用 Doris 的时候,只需要把数据灌入到 Doris 中来,就可以在 Doris 内部对数据进行管理、存储和查询,我们叫做内置数据存储(Internal Storage)或者说自管理的数据存储(Self-Managed Storage) 。在实际业务应用中,还会有大量数据存储在外部数据源中的,比如可能有很多历史数据,本身已经存在 Hive 系统中,或者是最近比较火的 Iceberg、Hudi 等数据湖格式中 。如果用户要把这些系统中的数据通过导入操作导入到 Doris 中来,代价是非常大的,因为数据量可能是 TB 甚至 PB 级别的 。把这些数据进行一次清理加工的计算量和存储开销都是非常大的 。所以很多用户希望借助 Doris 的高速查询能力,直接对外部数据源的数据进行分析 。这也是 Doris 数据湖分析、或者外部数据源加速分析的一个初衷 。
在早期的 1.0.0 版本中,Doris 就已经支持了对外部数据源的一些访问,比如对 Hive 外表的创建,对 Iceberg 外表的创建,或者对 MySQL 外表的创建 。但是在老版本中创建这些外部数据源的映射时,只能通过表级别的映射 。这会带来一个问题,比如这些表可能多达几十上百张,甚至是上千张,如果采用这种方式,用户需要对每一张表通过 create external table 这种方式去单独地建立一个映射关系,这是一个很费时费力的工作 。
 
Apache Doris 极速数据湖分析技术细节公开!

文章插图
 
所以在 Doris 的新版本中,通过引入 Catalog 的概念,简化这一操作,让用户可以通过一行命令就能快速开始对外部数据进行分析 。
 
Apache Doris 极速数据湖分析技术细节公开!

文章插图
 
Catalog 是标准 SQL 定义中的三个层级之一,就是 Catalog-Database-Table 。我们将 Catalog 分为两大类,一类是 Internal Catalog,另一类是 External Catalog 。其中 Internal Catalog 是管理 Doris 的内部表 。External Catalog 可以直接映射到一个数据源 。比如一个 Hive 集群、 ES 集群、 MySQL 数据库等等 。通过数据源映射,Doris 内部会自动的把外部的 database 和 table 进行同步 。所以在上图中可以看到,中间这一层,database 和 table 用虚线来表示 。也就是当创建完 Catalog 后,Doris 内部会自动把数据源中的 database,table 的信息全都同步过来,从而省去了单独手动映射每一张表的繁琐工作,快速接入到这些外部数据源进行查询 。通过这种方式,可以极大的降低对外部数据源接入的门槛儿 。


推荐阅读