架构师指南之开放表格式和对象存储篇

译文
开发 架构
本指南将从开放表格式和对象存储在构建现代化数据湖仓中的作用与演变出发,深入探讨 Apache Iceberg、Delta Lake 和 Apache Hudi三种顶级的表格式的特征比较,进而介绍如何为你的数据湖仓选择合适的开放表格式。

译者 | 陈峻

审校 | 重楼

近年来,开放表格式(Open table formats)和对象存储(object storage)正在重新定义各个组织构建其数据系统的方式,并为可扩展、高效且面向未来的数据湖仓data lakehouse)奠定了基础。通过利用对象存储的成本效益等独特优势,以及 Apache Iceberg、Delta Lake 和 Apache Hudi 等开放表格式的高级元数据管理功能,组织正在创建满足现代数据工作负载需求的模块化架构。

本指南将开放表格式和对象存储在构建现代数据湖仓中的作用与演变出发,深入探讨各种顶级的表格式的特征比较,进而介绍在针对高级分析和 AI 工作负载架构进行性能优化时的注意事项。据此,能够设计可扩展高效且能够适应数据驱动时代快速变化需求的数据系统。

开放表格式的适用范围

现代数据湖仓架构建立在三个关键组件之上,即:以对象存储为基础的存储层、位于中心的开放表式、以及最终传递可扩容的计算引擎。这种模块化设计经过优化,可充分利用对象存储的可扩展性和成本效益,实现无缝的元数据管理,以及横跨不同计算引擎的互操作性。

如下图所示,此类架构转变的核心在于计算和存储的分解。作为基础,对象存储提供了对于结构化、半结构化、以及非结构化数据的无缝管理;而开放表格式充当元数据的抽象层,支持类似数据库的功能,包括:模式(schema)演变、时间旅行、分区和 ACID(原子性、一致性、隔离性和持久性)事务Spark、Presto、Trino 和 Dremio 等计算引擎通过与这些表格式交互,提供了大规模处理和分析数据的灵活性,而不会受制于供应商。

数据架构的演变

如上图所示,数据湖仓的兴起可以被理解为数据架构一种更广泛的演变。过去,在线事务处理 (OTLP) 数据库等早期系统优先考虑的是事务完整性,但缺乏分析功能。之后,在线分析处理(OLAP) 系统的出现引入了数据仓库,优化结构化数据查询,但是其代价是无法有效处理半结构化非结构化数据。数据湖的出现解决了此类限制,为各种数据类型提供了可扩展的存储和读时模式 Schema-on-Read 功能。然而,数据湖缺乏事务保证,这引发了数据湖仓出现。能够将数据湖和数据仓库的优势集成到一个统一的架构中。

说到数据湖仓,它是基于开放表格式和对象存储构建且完全解耦的。这种分解式架构既提供了数据库的事务一致性,又提供了对象存储的可扩展性。

为何开放表格式是对象存储的理想选择

经过专门设计数据湖仓架构,旨在充分利用 Amazon Web Services (AWS) S3、Google Cloud Storage 和 Azure Blob Storage对象存储系统的可扩展性和成本效益也就是说,这种集成支持在一个统一的平台中无缝管理各种数据类型(如:结构化、半结构化和非结构化)。总体而言,对象存储上的数据湖仓架构的主要功能包括:

  • 统一存储层:通过利用对象存储,数据湖仓可以其原生格式存储大量数据,无需在存储前进行复杂的数据转换。这种方法不但简化了数据摄取,而且实现了与各种数据源的兼容。
  • 可扩展性:对象存储系统具有原生的可扩展性,使数据湖仓能够容纳不断增长的数据量,而无需对基础设施进行重大更改。这种可扩展性使组织能够有效地管理不断增多的数据集和不断变化的分析要求。
  • 灵活性:一流的对象存储可以部署在包括:本地、私有云、公共云、主机托管设施、数据中心以及边缘任何地方。这种灵活性使组织能够根据特定的运营和地理需求定制其数据基础设施。通过集成上述功能,数据湖仓架构结合了数据湖和数据仓库的优势进而提供了一全面的解决方案。由于所有这些设计建立在可扩展且灵活的对象存储系统因此也就实现了高效的数据存储、管理和分析。

典型的开放表格式

开放表格式是一种标准化的开源框架,旨在高效管理大规模分析数据集。通常,它作为数据文件之上的元数据层来执行可以促进跨各种处理引擎的无缝数据管理和访问。以下是三种典型的开放表格式--Iceberg、Delta Lake 和 Hudi:

Apache Iceberg

Apache Iceberg 是一种高性能的表格式,专为海量数据集而设计。作为现代分析工作负载的基石架构优先考虑高效的读取操作和可扩展性。其定义功能之一是将元数据与普通数据分离,从而允许基于快照的高效隔离和规划。这种设计消除了成本高昂的元数据操作,并能够支持跨大型数据集的并行查询规划。

Iceberg 生态系统的最新发展凸显了在整个行业的日益普及。S3 表能够让查询引擎直接访问存储在 S3 兼容系统中的表元数据和数据文件,从而减少延迟提高互操作性,简化数据管理。与此同时,Databricks 对 Tabular 的收购凸显了 Iceberg 在开放式湖仓平台中的首要作用,并强化了其对性能和治理的关注。Snowflake将 Polaris 开源的决定表明了该行业对开放性和互操作性的承诺,进一步巩固了 Iceberg 作为领先表格式的地位。

Delta Lake

与 Apache Spark 密切相关Delta Lake 最初由 Databricks 开发。它既能够与 Spark API 完全兼容,又可与 Spark 的结构化流式处理集成,实现了批处理和流式处理操作。其中,Delta Lake 的一个关键功能是它使用事务日志来记录对数据所做的所有更改,从而确保一致的视图和写入隔离。而且,该设计支持并发数据操作,能够适用于高吞吐量环境。

Apache Hudi

Apache Hudi 旨在应对实时数据摄取和分析的挑战,尤其是在那些数据需要频繁更新的环境中。也就是说,其架构支持用于高效数据摄取的写入优化存储(write-optimized storageWOS) 又可用于查询的读取优化存储(read-optimized storageROS),从而实现数据集的最新视图。

通过逐步处理数据流中的更改,Hudi 实现了大规模实时分析。bloom筛选条件和全局索引等功能可优化 I/O 操作,从而提高查询和写入性能。此外,Hudi 还包含了用于集群、压缩和清理的工具这些工具有助于维护数据表的组织和性能。而且,其处理记录级更新和删除的能力成为高速数据流和严格数据管理合规场景的实用选择。

比较开放表格式

Apache Iceberg、Delta Lake 和 Apache Hudi 都为数据湖仓化的架构带来了各自独特的优势。以下是基于它们主要特征的比较:

  • ACID 事务:所有三种格式都符合 ACID 要求,能够确保可靠的数据操作。其中,Iceberg 采用快照隔离来实现事务完整性Delta Lake 利用事务日志实现一致的视图和写入隔离Hudi 为高并发场景提供文件级并发控制。
  • 架构演变:每种格式都支持架构更改,允许添加、删除或修改数据列。Iceberg 提供灵活的架构演变,而无需重写现有数据Delta Lake 在运行时强制执行架构以保持数据质量而 Hudi 提供预提交转换功能以提高灵活性。
  • 分区演变:Iceberg 支持分区演变,无需重写现有数据即可无缝更新分区方案Delta Lake 允许分区更改,但可能需要手动干预才能获得最佳性能而 Hudi 提供精细集群作为传统分区的替代方案。
  • 时间旅行:这三种格式都提供时间旅行功能,允许用户查询历史数据状态。显然,该功能对于审计和调试来说非常用。
  • 广泛采用:Iceberg 是数据社区最广泛采用的开放表格式。从 Databricks 到 Snowflake 再到 AWS,许多大型平台都投资了 Iceberg。如果已经是这些生态系统的一部分或正在考虑加入它们,那么 Iceberg 可能会自然成为你的不二之选
  • 索引:Hudi 通过提供多模式索引功能,包括 Bloom 过滤器和记录级索引,提高查询性能。Delta Lake 和 Iceberg 依赖于元数据优化,不提供相同级别的索引灵活性。
  • 并发和流式处理:Hudi 专为实时分析而设计,有高级并发控制和内置工具(如 DeltaStreamer)用于增量数据的摄取Delta Lake 支持通过更改数据源实现流式处理而 Iceberg 提供基本的增量读取功能。虽然上述三种格式都为现代数据架构提供了强大的基础,但是由于各自的特点比较明显,因此具体该如何选择取决于特定的工作负载要求和组织需求。

性能预期

在数据湖仓架构中实现最佳性能对于充分利用开放表格式的功能至关重要而相关性能往往取决于存储层和计算层的效率。其中,

  • 存储层必须能够提供低延迟和高吞吐量,以满足大规模的数据分析需求。因此,选用的对象存储解决方案应有助于快速访问数据并支持高速传输,而且即便是在高工作负载下也能确保平稳运行。此外,高效的每秒输入/输出操作数 (input/output operations per secondIOPS) 对于处理大量并发数据请求也非常重要,它能够实现无瓶颈的响应式数据交互。
  • 计算层性能同样也会直接影响数据处理和查询执行速度。计算引擎需要通过可扩展,在不影响性能的情况下管理不断增长的数据量和用户查询。采用优化的查询执行计划和资源管理策略可以进一步提高处理效率。此外,计算引擎需要通过与开放表格式无缝集成,充分利用 ACID 事务、架构演变和时间旅行等高级功能。
    通过正确配置完全优化开放表格式也能够将元数据与普通数据分开管理,从而实现更快查询规划和执行。同时,数据分区将数据组成多个子集,通过减少操作期间扫描的数据量来提高查询性能。而通过对架构演变的支持表格式能够适应数据结构的变化,而无需进行大量的数据重写,实现了在确保灵活性的同时,最大限度地减少处理开销。
    可见,通过关注存储和计算层的上述性能方面,组织可以确保其数据湖仓环境高效可扩展,并能够满足现代分析和 AI 工作负载的需求。当然,这些考虑因素也会使开放表格式能够充分发挥其潜力,提供实时洞察和决策所需的高性能。

开放数据湖仓和互操作性

为了提供统一的数据管理方法数据湖仓架构往往会基于开放表格式构建不过,实现真正的开放性光靠采用开放的表格式是不够的。开放数据湖仓必须集成各种模块化、以及存储引擎、目录和计算引擎可互操作的开源组件,实现跨不同平台的无缝操作

好在开放表格式是一套开放标准,可以根据其设计,支持整个技术栈的互操作性和开放性。不过实际使用中,挑战仍然存在例如需要确保目录互操作性以及避免依赖专有服务进行数据管理。近推出的 Apache XTable 等工具便展示了其在通用兼容性方面的进展,一次、随处查询的系统提供了新的途径。需要注意的是,XTable 不允许用户以多种开放的表格式写入,只允许读取。

开放表格式的未来

随着数据湖仓的不断发展,各种趋势和进步正在塑造其未来。其中,

  • 一个重要增长领域便是 AI 和机器学习 (ML) 工作负载直接集成到湖仓架构中。对于存储层而言可能是与 Hugging Face 和 OpenAI 等关键 AI 平台直接集成的平台。对于计算层,AI 集成可能会导致创建针对 ML 算法优化的专用计算引擎,从而提高湖仓生态系统中训练和推理过程的效率。
  • 另一个显著增长的领域可能是开源社区。当 Databricks、Snowflake 和 AWS 等大型私营公司大行其道时,人们很可能忘记开放表格式其实一个真正的开放标准。Iceberg、Hudi 和 Delta Lake 可供任何贡献者开展协作或集成到开源工具和平台中。换句话说,它们是充满活力且不断发展的开放标准数据生态系统的一部分。我们可以预见到各种开源应用、插件、目录和创新在该领域的持续激增。
  • 最后,随着企业为 AI 和其他高级用例构建更多大规模、高性能的数据湖仓,开放表格式的采用率将继续上升。一些行业专业人士甚至将开放表格式的流行同于 2000 年代初 Hadoop 的崛起和后续的霸主地位。

小结

通过将开放表格式与高性能对象存储相结合,架构师能够构建开放、可互操作且能够满足 AI、ML 和高级分析需求的数据系统。通过采用上述提到的各项技术,组织可以创建可扩展且灵活的架构,从而在数据驱动时代推动业务的创新和提效

译者介绍

陈峻(Julian Chen),51CTO社区编辑,具有十多年的IT项目实施经验,善于对内外部资源与风险实施管控,专注传播网络与信息安全知识与经验。

原标题:The Architect’s Guide to Open Table Formats and Object Storage,作者:Brenna Buuck

责任编辑:华轩 来源: 51CTO
相关推荐

2012-06-20 13:54:44

架构性能优化

2022-06-15 10:04:51

存储选型MySQL

2022-08-29 09:14:01

战略设计核心域支撑域

2017-11-22 09:00:00

2012-09-29 13:29:11

存储架构架构缓存

2011-10-31 09:22:07

系统架构

2021-02-03 11:04:30

架构师能力挑战

2021-04-27 09:35:36

业务领域建模

2011-11-01 09:02:26

系统架构师

2018-11-28 09:38:34

微服务架构API

2022-04-27 09:09:57

架构师术语技术语言

2011-11-02 09:01:30

系统架构师

2011-10-27 09:08:59

系统架构师

2011-10-18 09:25:04

系统架构师

2023-06-05 08:19:20

性能优化CPU

2020-08-24 08:50:12

架构师TL技术

2009-12-18 10:22:50

Ray Ozzie架构师

2010-08-09 09:03:17

.NET企业级架构

2011-10-21 09:04:57

系统架构师

2011-10-19 09:20:44

点赞
收藏

51CTO技术栈公众号