国产开源湖仓LakeSoul--数据智能的未来方向

一、LakeSoul 设计理念和技术原理解读

首先和大家分享 LakeSoul 的设计理念。

坚守“ 做人真诚 · 做事靠谱 · 口碑至上 · 高效敬业 ”的价值观,专业网站建设服务10余年为成都发电机维修小微创业公司专业提供企业网站制作营销网站建设商城网站建设手机网站建设小程序网站建设网站改版,从内容策划、视觉设计、底层架构、网页布局、功能开发迭代于一体的高端网站建设服务。

1、LakeSoul 设计理念解析——背景

图:LakeSoul 设计理念解析——背景

Modern Data Stack,简称 MDS,中文翻译为现代数据栈,其特点之一就是数据上云,以云数据仓库为核心。同时数仓采用计算和存储分离的模式,计算资源可以弹性伸缩,满足负载波峰波谷的变化,降低成本;存储资源可以线性扩大,高可用,无容量限制。

  • 湖仓:在数据湖基础设施上构建数仓融合湖、仓各自的优势,湖仓一体能发挥出数据湖的灵活性与生态丰富性,以及数据仓库的成熟性与企业级能力,帮助企业建立数据资产、实现数据业务化、进而推进全线业务智能化,实现数据驱动下的企业数据智能创新,全面支撑企业未来大规模业务智能落地。
  • ELT:由 ETL 向 ELT 转变,实时自动化数据集成,增量式数据建模计算和查询。
  • 流批一体:流批统一计算链路、统一存储,统一数据链路,支持并发写、Upsert、ACID、快照读等功能。
  • 多元应用:BI/AI 一体化,多种计算模式、多种计算引擎直接读取数据,统一数据架构和口径。

2、LakeSoul设计理念解析——设计目标

图:LakeSoul 设计理念解析——设计目标

LakeSoul 的设计目标包括四部分,湖仓一体、流批一体、端到端实时以及 BI/AI 一体。

  • 湖仓一体:针对计算存储分离优化设计,在湖上低成本构建大规模数仓。
  • 流批一体:管理大规模的数据湖文件,支持高并发大批量的写入、Upsert 更新,快照读、回滚等机制。
  • 端到端实时:提供多源自动实时数据入湖(CDC、Kafka),实时增量计算 Pipeline等功能,打造端到端简单易用的实时数仓。
  • BI/AI 一体:支持大数据、AI 模型训练多种计算框架,使用湖仓统一数据口径。

3、LakeSoul 设计理念解析——时间线

图:LakeSoul 设计理念解析——时间线

LakeSoul 时间线起源于大型推荐和广告业务实时数据流场景,分五个阶段:

  • 2021.12前:LakeSoul 国产自研流批一体湖仓框架开源。
  • 2021.12至2022.07:重构元数据,提升并发更新和事务能力。
  • 2022.07至2022.10:发布 Flink CDC 多表自动入湖,支持整库同步,自动 DDL变更。
  • 2022.10至2023.05:发布 Native IO,扩大性能领先优势。LakeSoul 项目捐赠给 Linux 基金会孵化。
  • 2023.05至2023.6:发布全链路流式增量计算,自动合并等领先功能通过国产信创认证。

4、LakeSoul 技术解析——整体架构

图:LakeSoul 技术解析——整体架构

LakeSoul 的整体架构如上图所示。包括三层,底层 LakeSoul Storage Layer 表示数据存储层,中间 LakeSoul Query Engine 表示数据查询引擎,最上层 LakeSoul Distributed Meta Service 表示分布式元数据服务,左面是数据源,右面是加载数据和数据服务。

  • LakeSoul Storage Layer:数据存储层,支持的存储包括 Amazon S3、HDFS、MINIO、阿里云OSS 等,通过 Cloud Storage Driver、Hot Data cache 加载数据到数据存储层。
  • LakeSoul Query Engine:支持多种计算引擎包括 Spark、Flink、Hive 等,读取存储层数据进行加工、分析、建模等。
  • LakeSoul Distributed Meta Service:分布式元数据服务,包括元数据管理-Schema Manage、数据事务管理-ACID Control、数据分布/状态-Data Distrbution/Stats 等功能。
  • 数据源:包括流数据-Streaming Data 和批数据-Batch Data。
  • 数据服务:数据服务包括BI和AI两块,支持AI使用结构化和非结构化数据。

5、LakeSoul 技术解析——数据格式

图:LakeSoul 技术解析——数据格式

下面看一下 LakeSoul 的数据格式。

  • 表物理数据组织:使用 Parquet 格式存储;按主键哈希分片,单个文件内按主键排序;支持多级 Range 分区。
  • 表元数据组织:支持表、分区、文件多级管理。每次提交会产生一个新的版本 Version,每次提交版本号会递增。

6、LakeSoul 技术解析——元数据(元数据管理)

图:LakeSoul 技术解析——元数据(元数据管理)

元数据,主要包括分区信息表 Partition_info、数据提交信息表 Data_commit_info、表信息表 Table_info、表名 ID 信息表 Table_name_id 和表路径 ID 信息表 Table_path_id 等。

中心化的元数据管理包括以下内容:

  • 使用 PostgreSQL 作为存储:PostgreSQL 是开源的对象-关系数据库数据库管理系统,支持丰富的数据类型(如 JSON 和 JSONB 类型、数组类型)和自定义类型。
  • 使用 PG 事务实现并发控制、ACID 等能力
  • 使用 PG 两阶段提交协议用于数据并发读写时冲突检测
  • 使用 PG Trigger 机制实现事件订阅,用于触发自动 Compaction 等

7、LakeSoul 技术解析——元数据(两阶段提交协议)

图:LakeSoul 技术解析——元数据(两阶段提交协议)

元数据的两阶段提交协议,在 Spark/Flink 流/批作业写数据时执行,发生冲突时会进行重试或者失败等。

8、LakeSoul 技术解析——元数据(自动并发冲突解决机制)

图:LakeSoul 技术解析——元数据(自动并发冲突解决机制)

细分作业写入时数据提交类型,不同类型之间冲突时会采取如下几种措施:

  • 直接重试提交:兼容的写冲突(Append、Merge)
  • 重新排列 Commit:Compaction、Update 的部分情况
  • 不兼容冲突:并发全量 Update 等,提交失败

9、LakeSoul 技术解析——元数据(自动演进和快照管理)

图:LakeSoul 技术解析——元数据(自动演进和快照管理)

LakeSoul 还提供了 Schema 自动演进和快照管理的能力。

Schema 自动演进:

  • 在写时自动处理 Schema 变更。
  • 允许并发进行变更,不需要停作业再执行 DDL。
  • 读数据自动兼容,读数据自动兼容包括新增加列:旧数据自动补充 null;删除列:旧数据自动过滤该列;提升类型精度:旧数据自动执行 Upcast。

元数据快照管理:

  • 快照读、快照回滚、快照清理
  • 默认读取最新的快照

10、LakeSoul 技术解析——Native IO(设计理念和设计原理)

图:LakeSoul 技术解析——Native IO(设计理念和设计原理)

Native IO 的设计主要考虑了以下方面:

  • Upsert、MOR 读写的封装:包括屏蔽读写实现细节,与计算引擎无关 ;向上提供简洁的 Writer、Reader 接口。
  • 多引擎对接:包括方便对接各类 SQL、AI 引擎;支持向量化计算引擎;C、Java、Python 多语言支持。
  • 高性能:包括针对对象存储读写优化;严格的内存占用控制。
  • 实现原理如下:
  • 基于 Rust、Apache Arrow-rs 和 DataFusion 实现异步 Writer、Reader:包括使用 Parquet 作为存储格式;Writer:主键排序(支持磁盘 spill)、异步并发Multipart upload;Reader:异步 Parquet RowGroup Prefetch、MOR 主键有序归并。
  • 封装 C Interface。
  • 通过 jnr-ffi/ctypes 进一步封装 Java、Python 接口。

11、LakeSoul 技术解析——Native IO(性能对比)

图:LakeSoul 技术解析——Native IO(性能对比)

上图是 Spark 读写 AWS S3的性能对比。可以看到:

  • Spark 读 AWS S3 读性能 Parquet Scan 对比:Native IO 远高于 Parquet-mr。
  • Spark 读 AWS S3 写性能 Parquet Write 对比:Native IO 高于 Parquet-mr。

测试报告链接https://github.com/meta-soul/LakeSoul/tree/main/lakesoul-spark/src/test/scala/org/apache/spark/sql/lakesoul/benchmark/io

二、LakeSoul 核心功能和优势

接下来介绍 LakeSoul 的核心功能和优势。

1、LakeSoul 核心功能——入湖

图:LakeSoul 核心功能——入湖

首先要介绍的核心功能是入湖。LakeSoul 流批一体表存储系统由 Spark 湖仓表、Flink 湖仓表、Schema 自动演进、计算与存储弹性扩容、并发写入更新等功能模块组成。其中 Spark湖仓表模块实现了使用 Spark SQL 语句创建湖仓表、向表中插入数据、更新表中已有数据、读取湖仓中的表、读取表的历史快照、回滚到表的历史版本等功能;Flink湖仓表模块实现了使用 Flink SQL 语句创建湖仓表、向表中插入数据、批量读取湖仓表、流式全量读取湖仓表、流式增量读取湖仓表等功能;Schema 自动演进模块实现了 Schema 变更时自动兼容读取表的旧数据等功能;被测系统支持计算与存储能力的弹性扩容;支持对同一个表的同一个分区进行并发写入更新。

多源数据实时入湖包括以下能力:

  • 数据库多表实时入湖、Kafka 多 topic 实时入湖。
  • 支持 Flink CDC、Debezium 等多种 CDC 采集工具。
  • 自动发现新表、自动 DDL 变更。
  • 精确一次(Exactly Once):消息不会丢失,也不会被重复发送。

2、LakeSoul 核心功能——增量计算

图:LakeSoul 核心功能——增量计算

第二个核心功能是增量计算,LakeSoul 表在 CDC 读写时具有以下特性:

  • 读写均兼容 Flink Changelog Stream。
  • 增量读取 CDC 流。
  • 全量读取合并后数据。

3、 LakeSoul 核心功能——多流拼接

图:LakeSoul 核心功能——多流拼接

第三个是多流拼接,原生支持多流并发写入拼接。

  • 多个流可以是异构的,只要有相同主键列即可。
  • 其余列可以不同。
  • 消除 Join 计算,降低延迟,减少资源消耗。

4、LakeSoul 核心功能——权限和血缘

图:LakeSoul 核心功能——权限和血缘

第四是权限和血缘方面的功能。权限方面,实现了通用的 RBAC 的权限控制功能,用到了 PG 数据库本身的 RBAC 和行级别安全策略的功能。为了实现细粒度的表级别的权限控制,还用到了 Casbin。综合这些功能点,实现了较为完善的权限控制,并且对各引擎都是统一的。

数据血缘功能,采用了开源的 OpenLineage 协议来上报血缘关系。

5、LakeSoul 核心功能——自动维护

图:LakeSoul 核心功能——自动维护

第五是自动维护功能。自动维护包括自动全局 Compaction 服务,以及自动清理过期数据服务。

使用 PostgreSQL 的 Trigger 功能实现了如下功能:

  • 达到 Compaction /清理条件时触发事件。
  • 使用 Spark 作业监听事件并执行 Compaction /清理操作。
  • Spark 作业可以弹性伸缩。

6、LakeSoul 核心功能——性能评测

图:LakeSoul 性能评测

上图中展示了性能评测的一些数据,分别以 Hudi、Iceberg、LakeSoul 三种产品进行写 Write、读 Read 测试。测试时提供两种类型的表:写时复制(Copy on Write,COW)表和读时合并(Merge On Read,MOR)表,对于 Copy-On-Write Table,用户的 update 会重写数据所在的文件,所以是一个写放大很高,但是读放大为 0,适合写少读多的场景。对于 Merge-On-Read Table,整体的结构有点像 LSM-Tree,用户的写入先写入到 delta data 中,这部分数据使用行存,这部分 delta data 可以手动 merge 到存量文件中,整理为 parquet 的列存结构。

测试代码和数据如下:

  • https://github.com/meta-soul/ccf-bdci2022-datalake-contest-examples/tree/mor。
  • https://github.com/meta-soul/ccf-bdci2022-datalake-contest-examples/tree/cow。

测试方式如下:

  • 第一批插入1000万行数据。
  • 分10次插入100万行数据
  • MOR读取时没有执行过Compaction。

测试结论为:

S3云对象存储数据读取:读取 1000 万行数据,执行三次,平均读取时间 17.770秒,读性能相比 Spark 3.3.2 提升 1.722 倍;

S3 云对象存储数据写入:写入 1000 万行数据,执行三次,平均写入时间 43.194 秒,写性能相比 Spark 3.3.2 提升 1.800倍;

Merge on Read 场景下数据读取:读取 2000 万行数据,执行三次,平均读取时间 25.811 秒,读性能相比 Iceberg 1.1.0提升 1.420倍,相比 Hudi 0.12.2 提升 2.541倍;

Merge on Read 场景下数据写入:写入 2000 万行数据,执行三次,平均写入时间 266.628 秒,写性能相比 Iceberg 1.1.0提升 5.832 倍,相比 Hudi 0.12.2 提升 12.209 倍。

三、LakeSoul 应用场景和案例

接下来分享 LakeSoul 的一些应用场景和案例。

1、LakeSoul 应用场景——构建实时湖仓

图:LakeSoul 应用场景——构建实时湖仓

构建完整的实时湖仓一体链路包括:

  • 多源数据实时入湖
  • 全量、增量一体化分析
  • 实时增量计算
  • BI、AI 多种上层应用

2、LakeSoul 应用场景——实时机器学习

图:LakeSoul 应用场景——实时机器学习

构建实时机器学习样本包括:

  • 使用 LakeSoul 多流拼接功能
  • 将多个特征流、标签流实时拼接
  • 将样本流式传入机器学习训练,实现在线学习

四、LakeSoul 开源社区进展和未来规划

最后介绍一下 LakeSoul 开源社区进展和未来规划。

1、LakeSoul 开源社区

图:LakeSoul 开源社区

LakeSoul 于2021年底开源,采用 Apache License 2.0协议,成为国内首个开源湖仓框架。2023年5月将项目捐赠给 Linux 基金会,在 Linux Foundation AI & Data 基金会技术委员会答辩会议上,我们介绍了 LakeSoul 开源项目,得到了在场技术委员们的一致高度评价,成功通过投票,正式成为 Linux 基金会的孵化项目。成为 Linux Foundation AI & Data 旗下 Sandbox 项目。

未来 LakeSoul 项目将在 Linux 基金会的指引下,秉承开源、开放、协作的理念,全面建设发展 LakeSoul 开源社区。数元灵公司也将一如既往地全力支持 LakeSoul 开源项目和社区,持续贡献核心功能和特性。在这里,我们也真诚邀请广大开发者和用户参与到社区中来,共同打造新一代湖仓一体开源框架。

https://github.com/lakesoul-io/LakeSoul。

2、LakeSoul 未来演进方向

图:LakeSoul 未来演进方向

随着 LakeSoul 新版本的发布,进入 Linux 基金会孵化和通过国产信创认证,LakeSoul 项目的发展揭开了新的篇章。LakeSoul 近期还将陆续推出一系列更新:在功能方面,将会增加内置角色权限控制、数据质量校验等功能点,进一步完善数仓能力;在生态方面,将会推出原生 Python 读取接口并与多种 AI 框架对接,成为 AI 大模型的新一代数据底座。

未来 LakeSoul 将继续围绕功能、生态和性能这三方面进行迭代。

功能方面:

  • 数据质量规则自动化校验
  • 原生 Python Reader
  • Hadoop/K8s 自动化部署

生态方面:

  • 支持更多数据库入湖
  • Kafka Connect Sink
  • LogStash Sink
  • Presto Connector

性能方面:

  • 提升 MOR 性能
  • Minor compaction
  • 支持引擎向量化计算
  • 本地缓存

文章题目:国产开源湖仓LakeSoul--数据智能的未来方向
URL链接:http://www.shufengxianlan.com/qtweb/news3/409503.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联