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

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

业界在 LakeHouse 里面有两个方向,一个是湖上建仓,比如 Databricks2.0 的 Lakhouse 系统平台,主要是依赖于 Delta Lake 统一的数据湖存储格式,在此基础上统一了元数据,并基于 Spark 引擎统一提供的批流一体处理能力,实现在数据湖上建设数仓。
另外一个是仓外挂湖。业界的发展主要是以 Snowflake 为代表,主要是在它的 EDW2.0 系统里面实现了一个仓外挂湖。比如已经有了 Hive 的数仓存储体系,再引入数据湖的格式,并实现了通过 Hive 对数据湖进行读和写,这种方式就叫做仓外挂湖。
Snowflake 也有一套完整的数据仓库系统,它有自己的计算引擎和存储格式、Cache 等一系列系统,在这些系统之上引入了数据湖的格式,比如引入 Iceberg。

主流的三种开源技术是 Hudi、Iceberg 和 Databricks,它们分别在 2016 年、2017 年和 2019 年被开源出来。
2021 年 Lakehouse 技术首次进入 Gartner 成熟度曲线,Lakehouse 技术在曲线中处于起步阶段,意味着 Lakehouse 未来会有非常大的发展空间。
Lakehouse 在通用数据基础设施蓝图(2.0)中也处于核心地位,位于存储、查询和计算之间,贯通通用数据基础设施蓝图的上下游。
Hudi是一个用于大数据处理的开源库,支持增量数据处理和实时数据流处理。
Iceberg是一个开源表格式,旨在解决Apache Hive表的限制。
Databricks是一个基于Apache Spark的云端数据处理平台。
Lakehouse则是一种新兴的数据架构,结合了数据湖和数据仓库的优点,旨在提供更好的数据管理和查询能力。
Gartner成熟度曲线是一个用于评估技术成熟度的模型,可以帮助企业了解技术的发展趋势和使用价值。通用数据基础设施蓝图则是一种用于设计企业数据架构的框架,旨在提供一个可扩展、可靠和安全的数据基础设施。
Lakehouse 的设计原则由国内阿里、腾讯、云粒、数梦、滴普、亚信、比智、甲骨文、巨杉、深算院、新华三等公司在 2020 年共同起草,分为功能性设计要素和非功能性设计要素两类。
其中,

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

数据湖文件格式主要包括 Avro、Parquet、ORC 等主流的文件格式。 其中,

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

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

数据湖表格式在读写上需要关心的几个点:

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

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



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

主要特点是利用数据湖的增量、多版本查询、TimeTravel 等能力进行构建。


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

现在的湖仓只能做到近实时、分钟级,如果想做到像 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 方式去回放和流读数据湖的数据。

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