Fork me on GitHub

数据湖知识体系解析

以下文章来源于 https://zhuanlan.zhihu.com/p/621334910

阅读本文,您将获得以下收益:

  1. 了解到主流的数据湖组件之间的对比

  2. 了解数据湖下一步演化方向


导读: 本次分享题目为《数据湖知识体系解析》。

主要介绍以下四个方面的内容:

  1. 数据湖的演进

  2. 数据湖重要组成部分

  3. 数据湖应用场景

  4. 数据湖探索


分享嘉宾|徐前进 腾讯 数据湖研发高级工程师

编辑整理|陈沃晨 浪潮云

出品社区|DataFun


01/数据湖的演进


1. 什么是数据湖

(1)什么是数据湖

数据湖是一种存储系统,底层包括不同的文件格式及湖表格式,可存储大量非结构化和半结构化的原始数据。数据消费者可以访问该数据进行数据分析,包括 BI、报表和机器学习模型训练。有了数据湖,数据变得越来越可用。

(2)数据湖、数据仓库和 Lakehouse 的区别



数据仓库和数据湖的结合形成了Lakehouse ,数据仓库和流结合形成了 Streaming Warehouse,数据仓库、数据湖、流三者结合可能是下一个需要进一步延伸和研究的方向。

Lakehouse 同时具备数据湖和数据仓库的特性,目前这个方向已经逐渐走向成熟。与数据湖相比,Lakehouse 集成了计算框架和 SQL 查询引擎,添加了数据治理能力,支持 Catalog 表管理和先进的作业编排。

① 业界进展(Databricks 2.0)-湖上建仓



业界在 LakeHouse 里面有两个方向,一个是湖上建仓,比如 Databricks2.0 的 Lakhouse 系统平台,主要是依赖于 Delta Lake 统一的数据湖存储格式,在此基础上统一了元数据,并基于 Spark 引擎统一提供的批流一体处理能力,实现在数据湖上建设数仓。

② 业界进展(Snowflake EDW 2.0)-仓外挂湖



另外一个是仓外挂湖。业界的发展主要是以 Snowflake 为代表,主要是在它的 EDW2.0 系统里面实现了一个仓外挂湖。比如已经有了 Hive 的数仓存储体系,再引入数据湖的格式,并实现了通过 Hive 对数据湖进行读和写,这种方式就叫做仓外挂湖。Snowflake 也有一套完整的数据仓库系统,它有自己的计算引擎和存储格式、Cache 等一系列系统,在这些系统之上引入了数据湖的格式,比如引入 Iceberg。

2. LakeHouse 的演进

(1)Lakehouse 的演进路线



主流的三种开源技术是 Hudi、Iceberg 和 Databricks,它们分别在 2016 年、2017 年和 2019 年被开源出来。2021 年 Lakehouse 技术首次进入 Gartner 成熟度曲线,Lakehouse 技术在曲线中处于起步阶段,意味着 Lakehouse 未来会有非常大的发展空间。Lakehouse 在通用数据基础设施蓝图(2.0)中也处于核心地位,位于存储、查询和计算之间,贯通通用数据基础设施蓝图的上下游。

(2)Lakehouse 的设计原则

Lakehouse 的设计原则由国内阿里、腾讯、云粒、数梦、滴普、亚信、比智、甲骨文、巨杉、深算院、新华三等公司在 2020 年共同起草,分为功能性设计要素和非功能性设计要素两类。其中,功能性设计要素包括: 一体化架构、存算分离、事务和数据一致性、全数据类型。**非功能性设计要素包括:**弹性高可用、加强的数据治理、尽量少的数据冗余、高并发支持、运维可观测性、高开放性。

--

02/数据湖重要组成部分


1. 数据湖物理存储层



数据湖的存储层主要包括大数据生态的 HDFS 文件系统、主流的云原生对象存储。数据湖物理存储需要具备同时支持 HDFS 生态和云原生的生态。

2. 数据湖文件格式



数据湖文件格式主要包括 Avro、Parquet、ORC 等主流的文件格式。其中,Avro 是行级别的,有利于写。Parquet 和 ORC 是列级别的,更方便读(支持列裁剪和过滤)。

3. 数据湖表格式

(1)数据湖表格式的功能特点

功能特点主要包括以下几个方面:

① DML 和 SQL 支持

直接在分布式文件上提供 Merge Into、Update 和 Delete 操作。除了 SQL,有些还支持Scala/Java 和 Python API

② Schema Evolution

Table format 的一个关键特性,意味着在不破坏任何内容甚至扩大某些类型的情况下添加新列。

③ ACID 事务、回滚、并发控制

ACID 事务确保所有更改都成功提交或回滚。确保永远不会以不一致的状态结束。有不同的并发控制,例如保证读取和写入之间的一致性。

④ 时间旅行

数据湖表格式会将存储在数据湖中的大数据版本化并形成多版本。可以访问该数据的任何历史版本,在意外写入或删除错误的情况下回滚数据。

⑤ 文件布局优化

随着时间的推移摄入的小文件会增加,但查询数千个小文件很慢,文件布局优化可以将文件碎片重新整理为更大的文件,从而在许多方面提高性能。

⑥ 统一批流处理

数据架构无需在批处理和流式中区分,它们都以相同的表视图对外暴露,复杂性更低,速度更快。无论是从流还是批处理中读取都能获取一致的数据快照。

(2)数据湖表格式-社区活跃度



Delta Lake、Apache Iceberg 和 Apache Hudi 是目前最突出的开源数据湖 Table Format 产品。Delta Lake 2.0 在发布之后一路飙升,Star 的活跃数最高。起源最早的是 Hudi,其次是 Iceberg。

(3)数据湖表格式-读写特性



数据湖表格式在读写上需要关心的几个点,一是增量查询(Incremental Query) ,它在构建流数仓或批数仓时是一个非常重要的特性。二是时间旅行(Time Travel) ,我们能用它对数据进行回溯和重放,去做数据的回补。三是并发(Concurrency) ,不同的 Job 可以同时操作一张表。四是主键(Primary Keys),有了它可以像传统数据库一样更好地去做更新,比如进行 Upsert 操作。

(4)数据湖表格式-表服务



表服务主要关心 Compaction 和 Cleaning,还有 Schema Evolution 等能力。

(5)数据湖表格式-平台能力



平台能力主要关注数据质量检测(Data Quality Validation)、数据写入监控指标(Monitoring)的成熟度等。

(6)数据湖表格式-生态支持



生态支持方面基本上差不多,都做的挺好。

--

03/数据湖应用场景


1. DB 数据入仓/湖



第一种是像 MySQL 这种传统数据库通过 Binlog 发布到消息队列 Pulsar,再通过计算引擎去消费它,并存储到数据湖。第二种是通过 FlinkCDC 的 Connector 组件写入到数据湖。第三种是通过 DTS 这种数据传输服务写入到数据湖里面,这样做的好处是能够将 T+1 数据新鲜度提升到 5 分钟。

2. 近实时 OLAP



主要是通过消费 MQ 里面的数据,通过 Flink 或者 Spark 计算引擎对数据进行加工和处理,写入到数据湖。通过 Presto、StarRocks 等 OLAP 引擎去进行实时查询,用来支撑分钟级别的查询场景。

3. 近实时 ETL



主要特点是利用数据湖的增量、多版本查询、TimeTravel 等能力进行构建。首先通过计算引擎消费 MQ 数据并把依次写入到 ODS 层、DWD 层、DWS 层,DWD 层可以通过流读 DWS 层写入到 DWD 层,DWS 亦是如此。最后通过 DWS 层把数据写入到我们需要分析的服务里面。

4. 湖仓一体



湖仓一体是在构建近实时 ETL 场景的基础之上,按照完整的数据仓库分层模型去建设数仓。因为数据湖组件实现了批流一体的存储,再通过批流一体的计算引擎,把数据写入到第三方的结果数据库中,从而提供 API 或者其它的服务的能力,去构建湖仓一体。

--

04/数据湖探索


1. Stream Warehouse



现在的湖仓只能做到近实时、分钟级,如果想做到像 MQ 一样实时的级别,就需要借助 MQ 的能力。Stream Warehouse 的实现上会有两种方式。第一种是在 MQ 中引入湖组件,第二种是两者的缝合,第三种是湖组件中引入 MQ。以第一种 MQ 中引入湖组件为例,使用 Pulsar 作为 MQ,生产端和消费端会产生相应的数据写入到 Ledger 中,通过 Ledger 持久化所需要的消息文件。中间过程是已经关闭的 Ledger 数据会进行 Offloader 离线读取,写入到 Hudi 这样的湖组件中。热备的数据继续走 Ledger(MQ 体系),冷备的数据通过 Hive 或者 Presto 去读 Hudi,从而达到同时兼顾实时的场景。



Stream Warehouse主要是 Flink 社区提出的,主要包括两个组件:LogStore 和 FlieStore。LogStore 主要是使用 MQ 消息中间件(Pulsar),FlieStore 主要是使用一种 LSM 的文件格式。写的时候双写 LogStore 和 FlieStore,读的时候通过先读 FlieStore,再读 LogStore 方式去回放和流读数据湖的数据。

2. Fairhouse



Fairhouse 其实是 Sundeck 提出的一个新的框架或体系,大概会在 2025 年初步完成实现。相比于 Lakehouse,Fairhouse 的架构变成了三层,原来 Lakehouse 的 Query Engines 这一层拆分成计算引擎层和 API 层。比如原来通过 Trino SQL+ Trino Engine 去访问数据湖的方式,变成了调用 Trino SQL 的 API,然后由计算引擎层决定是用 Spark 引擎或 Velox 引擎去执行,对计算引擎的选择更加智能,这样做会更加公平。

今天的分享就到这里,感谢大家!



▌2023数据智能创新与实践大会

  • 4大体系,专业解构数据智能
  • 16个主题论坛,覆盖当下热点与趋势
  • 40+演讲,兼具创新与最佳实践
  • 1000+专业观众,内行人的技术盛会

第四届DataFunCon数据智能创新与实践大会将于⏰ 7月21-22日在北京召开,会议主题为新基建·新征程,聚焦数据智能四大体系:数据架构数据效能算法创新智能应用 。在这里,你将领略到数据智能技术实践最前沿的景观

欢迎大家点击下方链接获取大会门票~
DataFunCon2023(北京站):数据智能创新与实践大会



本文地址:https://www.6aiq.com/article/1681431312720
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出