ITPub博客

首页 > 数据库 > 数据库开发技术 > 湖仓一体的管理引擎分析

湖仓一体的管理引擎分析

原创 数据库开发技术 作者:lixiaoya84 时间:2023-08-24 09:32:46 0 删除 编辑

‍‍

前面已经有几篇文章介绍了湖仓一体出现的原因和优势,详细参见《数据平台:湖仓一体、流批一体、存算分离的核心问题及原因解析》、《云原生湖仓一体的优势和挑战》、本文详细介绍一下湖仓一体的关键组件以及技术。



01

—

湖仓一体诞生的由来‍‍‍‍‍


湖仓一体(Lakehouse)的概念最初是由Databricks公司提出的,该公司是由Apache Spark的创始人之一成立的。Lakehouse是Databricks提出的将数据湖(Data Lake)和数据仓库(Data Warehouse)融合在一起的概念,旨在解决传统数据仓库和数据湖之间的差异和限制。 

Databricks团队于2019年在Spark + AI Summit上首次提出了Lakehouse的概念,并在之后的时间中推动其发展。他们认为,传统数据仓库和数据湖各有优势,但由于差异性,数据管理和分析变得复杂。Lakehouse通过将数据湖和数据仓库的特点相结合,提供一种统一且综合的数据管理和分析解决方案。 

Databricks的Lakehouse概念在业界引起了广泛的关注和讨论,越来越多的组织开始关注和采用湖仓一体的建设方案。同时,也有其他公司和开源社区推动湖仓一体概念的发展,并提供相应的解决方案和工具。


数据仓库和数据湖的特性区别如下图所示:


特性 数据仓库 数据湖
数据来源 来自事务系统、运营数据库和业务线应用程序的关系数据 来自 IoT 设备、网站、移动应用程序、社交媒体和企业应用程序的非关系和关系数据
数据结构 结构化 非结构化
Schema‍‍‍ 设计在数据仓库实施之前(写入型 Schema) 写入在分析时(读取型 Schema)
存储成本‍‍‍‍‍ 更快查询结果会带来较高存储成本 更快查询结果只需较低存储成本
数据质量 可作为重要事实依据的高度监管数据 任何可以或无法进行监管的数据(例如原始数据)
用户 业务分析师 数据科学家、数据开发人员和业务分析师
用途‍‍‍ 批处理报告、BI 和可视化 机器学习、预测分析、数据发现和分析

而数据仓库和数据湖处理数据的方式造成了,数据仓库数据处理类型是BASE,而数据湖处理数据的类型是ACID。‍‍




02

—

数据湖和数据仓库数据处理区别‍‍‍‍‍‍‍‍


而数据仓库和数据湖处理数据的方式造成了,数据仓库数据处理类型是BASE,而数据湖处理数据的类型是ACID。数据仓库的数据处理模式是BASE的,大家应该都比较清楚了,那么数据湖的数据处理类型为什么需要是ACID的和事务性数据库一样了?‍


数据湖处理数据之所以需要ACID(原子性、一致性、隔离性和持久性)的特性,是因为ACID可以确保数据在处理过程中的完整性和可靠性,避免数据出现错误或丢失的情况。 如果数据湖处理数据不具备ACID特性,可能会出现以下问题:


1. 原子性问题:如果处理过程中发生了部分错误,没有原子性的机制进行回滚,数据可能会出现不一致的情况,从而影响后续数据的分析和使用。

 

2. 一致性问题:多个同时进行的数据处理操作可能会导致数据不一致的情况,例如同时对同一个数据进行写入和更新操作,没有一致性的机制会导致数据被覆盖或者出现冲突。


3. 隔离性问题:多个同时进行的数据处理操作可能会相互干扰,导致数据处理结果错误。如果没有隔离性的机制,可能会导致数据错乱、重复或者丢失。 


4. 持久性问题:如果没有持久性的机制,数据处理过程中的中间结果可能会丢失,从而无法进行后续的分析和使用。


综上所述,ACID的特性可以确保数据湖处理过程中的数据完整性和可靠性,避免数据出现错误或丢失的问题,从而提高数据处理的可信度和可用性。


以下是ACID和BASE的区别:‍‍‍‍‍‍

特性 ACID BASE‍‍‍
数据结构‍‍‍ 模式Schema必须存在、表结构必须存储、数据的类型是确定的‍‍ 模式Schema是动态的、表结构在运行中调整、存储不同的数据类型
一致性 强一致性可用 最终一致性,不追求一致性‍
处理焦点 事务 键值存储
处理模式 行/列 宽列存储
是否事务‍ 是 不一定

03‍

—

湖仓一体主要的管理引擎分析‍


前面介绍了数据仓库和数据湖各自的优势和数据处理的区别,为了融合两者的优势而诞生的湖仓一体目前主要的管理引擎主要是:Iceberg、Hudi、Delt Lake。为什么说他们是管理引擎了,不是计算引擎和存储引擎了?因为这些引擎本身不提供分析数据的功能,也不是存储引擎,因为他们不提供存储数据的能力。提供分析能力的计算引擎例如Flink,Spark、Streams等,提供存储引擎的例如S3,OSS、HDFS、Azure、云等存储。


一、Iceberg


1、事务性写入:Iceberg 支持事务性写入,保证数据一致性。当写入操作发生时,数据会先被写入到新的数据文件中,然后再被写入到元数据中,确保数据的一致性和可靠性。


2、原子性更新:Iceberg 支持原子性的更新操作,可以对数据表中的数据进行原子性的更新,保证数据的一致性。


3、快照隔离:Iceberg 提供了快照隔离的能力,不同的读操作可以读取到不同时间点的数据快照,确保读操作之间的隔离性。


4、基于文件的存储和检索:Iceberg 使用文件格式存储数据,可以支持高效的数据存储和检索。Iceberg 使用列式存储和数据压缩等技术来减少存储空间和提高查询性能。


5、版本控制和元数据管理:Iceberg 支持版本控制和元数据管理,可以跟踪表中数据的变化,并提供详细的元数据信息,方便数据的管理和查询。


6、数据分区和分桶:Iceberg 支持数据的分区和分桶,可以按照指定的列对数据进行分区和分桶,以提高查询效率和减少扫描数据的量。 


7、模式演化:Iceberg 支持模式的演化,可以在不停机的情况下对表的模式进行更新和修改,方便数据的迭代和演进。 


总的来说,Iceberg 提供了一套高效、可靠、可扩展的数据管理能力,使得数据湖更容易使用和管理,降低了数据管理的复杂性。


二、Hudi


1、ACID事务能力,支持实时入湖和批量入湖。Hudi 提供事务支持,确保写入或更新操作的原子性,并保证数据的一致性。在写入期间,Hudi 使用写入顺序日志(Write-Ahead Logs)来记录所有的写操作,并在故障恢复时保证数据的一致性。


2、多种视图能力(读优化视图/增量视图/实时视图),支持快速数据分析。


3、MVCC设计,支持数据版本回溯。


4、自动管理文件大小和布局,以优化查询性能准实时摄取,为查询提供最新数据。


5、支持并发读写,基于snapshot的隔离机制实现写入时可读取。


6、支持原地转表,将存量的历史表转换为Hudi数据集。


7、数据索引:Hudi 内置了灵活且高效的数据索引机制,支持对数据集的列和分区进行索引,以加快数据的查询和过滤。


8、兼容多种数据格式和存储:Hudi 可以与多种数据格式(如Parquet、Avro等)和存储系统(如HDFS、S3等)进行无缝集成,适用于不同的数据湖环境。


三、Delt Lake


‍1、事务性写入:Delta Lake 支持原子性、一致性、隔离性和持久性 (ACID) 的事务性写入。这意味着写入操作要么全部成功,要么全部失败,可以确保数据的一致性和完整性。

2、数据版本控制:Delta Lake 可以跟踪和管理数据集的变化,支持数据版本控制。每次写入操作都会生成一个新的数据版本,并记录变化的详细信息,方便数据的回溯、比较和管理。

3、时间旅行查询:Delta Lake 支持时间旅行查询,可以查询特定时间点或时间范围的数据版本,方便用户查看历史数据状态和进行数据回滚。 

4、 数据一致性保证:Delta Lake 使用写入日志(Write-Ahead Logs)来保证数据的一致性。写入操作会先写入日志,然后再将数据持久化到存储层。在故障发生时,可以根据日志进行数据恢复和重放。 

5、快速数据索引:Delta Lake 提供了高效的数据索引机制,支持基于文件的元数据索引和数据索引。这样可以加快数据的查询和过滤操作,提高查询性能。

6、元数据管理:Delta Lake 提供元数据管理功能,可以记录数据集的模式(Schema)、表的统计信息和其他元数据信息。这些元数据信息可以用于数据查询优化和表的管理。 

7、兼容性和互操作性:Delta Lake 兼容 Apache Spark 和其他基于 Spark 的工具和服务。它可以与多种数据格式(如 Parquet、Avro 等)和存储系统(如 HDFS、S3 等)进行无缝集成,适用于不同的数据湖环境。 

综上所述,Delta Lake 提供了强大的功能和特性,使得数据湖的管理和使用更加可靠、高效和灵活。


三个管理引擎的相同点和区别是什么?


Iceberg、Hudi 和 Delta Lake 是三个不同的数据湖管理引擎,它们有一些相同点和区别: 


相同点: 


1. 事务性写入:这三个引擎都支持事务性写入,确保数据的原子性和一致性。 

2. 支持数据版本控制:Iceberg、Hudi 和 Delta Lake 都支持数据版本控制,可以跟踪和管理数据集的变化,提供时间旅行查询和回滚数据的能力。 

3. 与大数据生态系统集成:这三个引擎都与大数据生态系统(如 Apache Spark)紧密集成,可以与各种数据格式和存储系统无缝协作。 

4. 元数据管理:Iceberg、Hudi 和 Delta Lake 都提供元数据管理功能,记录数据集的模式和其他元数据信息,方便查询优化和表的管理。 


区别: 


1. 架构和实现:Iceberg 使用分层文件组织(Hierarchical File Organization)和写前日志(Write Ahead Logs)的方式实现数据管理,Hudi 则通过管理数据的元数据,实现了对数据的管理。而 Delta Lake 是基于 Parquet 和 Hadoop 分布式文件系统的存储引擎实现管理,原理也是基于数据版本控制和元数据管理实现数据管理。 


2. 查询性能:Iceberg、Hudi 和 Delta Lake 在查询性能上有所区别。Iceberg 提供了索引功能,可以加速查询和过滤操作。Hudi 着重于增量写入和流处理,并提供快速数据索引。而 Delta Lake 则通过优化存储文件格式和使用元数据索引来提高查询性能。

 

3. 社区支持和生态系统:Delta Lake 作为开源项目得到了广泛的社区支持,并与 Apache Spark 紧密结合。Iceberg 由 Netflix 发起并得到大量企业支持,Hudi 由 Uber 发起并有活跃的社区生态系统。 


4. 成熟度和使用情况:Delta Lake 在数据湖管理领域中比较成熟,并且得到了广泛的应用和采用。Iceberg 和 Hudi 也具有一定的用户和使用量,但相对来说可能相对较新。




注:

Iceberg将数据进行分层管理,主要分为元数据管理层和数据存储层。元数据管理层又可以细分为三层:VersionMetadata、Snapshot、Manifest。VersionMetadata存储当前版本的元数据信息(所有snapshot信息);Snapshot表示当前操作的一个快照,每次commit都会生成一个快照,一个快照中包含多个Manifest,每个Manifest中记录了当前操作生成数据所对应的文件地址,也就是data files的地址。基于snapshot的管理方式,iceberg能够进行time travel(历史版本读取以及增量读取),并且提供了serializable isolation。数据存储层支持不同的文件格式,目前支持Parquet、ORC、AVRO。


欢迎加入【数据行业交流群】社群,长按以下二维码加入专业微信群






往期历史热门文章:

基于DataOps的数据开发治理:实现数据流程的自动化和规范化

数据平台:湖仓一体、流批一体、存算分离的核心问题及原因解析

数据治理体系该怎么建设?

实时数仓&流批一体技术发展趋势

数据仓库、数据中台、大数据平台的关系?

数字化转型如何促进业务的发展

数据中台中的核心概念解析

数据治理中的数据标准的作用?

全面数字化转型:打造全新营销模式





原文作者:Ruby的数据漫谈;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2021-06-18

  • 博文量
    252
  • 访问量
    132833