1、Lakehouse 之我见
对于 Lakehouse,可能大家最直观的理解就是数据湖仓一体,到底什么是湖仓一体,Lakehouse 到底要解决什么样的问题,到目前为止没有统一的标准。我理解的 Lakehouse 是基于现代化云上存储计算分离架构,解决了如下问题:
1. 数据重复。尽可能解决维护多套数据分析系统,比如湖和仓的数据重复。去除数据重复性,真正做到 Single source of truth。
2. 低廉存储成本。在数据分析领域中,一般计算和存储都是不对等的。云上的对象存储大大降低了数据分析的存储成本和运维成本。
3. 在技术形态上有统一的架构。在现阶段数据分析场景中,面向不同的场景及不同的时延需求所需要的技术架构也不尽相同,造成系统复杂、运维成本高昂的问题。
4. 有效地降低数据分析的计算和 IO 成本。现在的数据分析系统大多是基于 Apache Hadoop(以下简称 Hadoop)生态技术栈构建,数据更新和删除需要通过 ETL 来进行,会造成大量的重复计算,从而导致计算和 IO 成本上升。
要解决如上问题,Lakehouse 从技术上要具备什么样的核心能力呢?
1. 事务支持和多版本控制。Lakehouse 需要处理多条不同的数据管道,需要在不破坏数据完整性的前提下支持并发读写事务。
2. 高效的更新。基于数据合规和数据更新是业务客观存在的需求。如何高效对数据更新是 Lakehouse 核心能力之一。
3. 高效数据消费。数据分析场景查询是非常复杂的,Lakehouse 需要具有面对复杂业务高效响应的能力。
4. 便捷的数据管理能力。数据管理在 Lakehouse 里面至关重要。数据管理不仅仅是业务数据上质量管理、数据关系的管理,还包含底层数据的索引、元数据版本管理等。
基于以上分析得出,Lakehouse 需要如下四个技术基础组件:
1. 统一的数据格式。基于这个数据格式,可以完成事务管理、高效更新等。
2. 统一的执行引擎。通过统一的执行引擎完成 ETL 类分析和机器查询类分析。
3. 统一的数据管理。提供完善的数据质量、数据分析、数据科学、数据格式等管理能力。
4. 统一的存储。价格低廉、高稳定性、高可靠性的统一存储。
2、Lakehouse 基础技术架构
基于这四个核心技术条件,在云基础平台上,如何一步一步去构建云上 Lakehouse 呢?首先从技术架构上拆解云上 Lakehouse。从技术角度看,可以分为如下五层:
1. 计算资源层。云上的云服务器、裸金属以及容器可以为 Lakehouse 提供海量的计算资源,同时还可以通过弹性实现资源随负载的变化而变化。
2. 云上的存储层。云上的对象存储、云 HDFS 、文件存储提供了面向不同业务场景的低成本、高可靠性、高稳定性的存储解决方案。而且云上存储是使用按量计费,成本更加低廉。
3. Data Lake Storage 层(表格式层)。本层使用开源的技术解决方案比如 Apache Iceberg(以下简称 Iceberg)、Apache Hudi(以下简称 Hudi)。同时云上的 Iceberg 和 Hudi 也针对云存储和计算做过大量的优化和扩展。基于开源的表格式的优势是开源开放、格式透明。
4. 统一的计算引擎层。统一计算引擎需要具备 ETL 和继续查询快速响应的能力。现阶段都是通过 Apache Spark(以下简称 Spark)来做 ETL,通过 StarRocks 做机器分析。
5. 统一的数据管理层。本层需提供完善的数据治理。数据管理可以通过 Wedata 来实现数据质量、血缘、数据科学等基础管理,通过 EMR、Lake Service 可以实现更底层的表格式的快照事务效文件以及索引管理的能力,降低 Lakehouse 使用的门槛。