数据湖与数据仓库的桥梁:深入解析湖仓一体架构

本文深入探讨了湖仓一体架构如何融合数据湖的灵活性与数据仓库的可靠性和治理能力,详细分析了其核心组件、设计模式、实施考量及典型用例,为现代数据管理提供了统一、高效的解决方案。

数据湖与数据仓库的桥梁

在当下的分析领域,公司严重依赖数据湖和数据仓库作为数据存储和分析的主要来源。一方面,数据湖允许轻松存储各种原始和未处理的数据;另一方面,数据仓库支持以适合报告和分析的方式对数据进行格式化、存储和处理。

图1:从数据湖和数据仓库到湖仓模型的演进

然而,这些系统的管理充满了重大的问题。组织通常会遇到诸如数据分散、ETL(提取、转换、加载)流程重叠以及跨平台的数据质量和格式不一致等问题。所有这些困难都可能导致分析速度变慢、成本增加以及治理更加复杂。 湖仓一体架构已成为这些问题的解决方案。通过结合数据湖的适应性和数据仓库的性能与管理能力,湖仓一体架构提供了统一的存储、治理和计算能力。湖仓一体平台的采用率在整个行业飞速增长,标志着向更高效、更灵活的分析环境的转变。 我们将探讨湖仓一体架构如何解决这些问题,并为统一现代数据存储和分析提供建议。

背景:传统方法的不足之处

尽管数据仓库和数据湖是数据分析的重要组成部分,但单独使用它们并不能使公司处于最佳位置。

数据仓库 传统的数据仓库在处理结构化数据和进行分析方面有很大优势;然而,它们极其昂贵,无法扩展,而且还有一个重大缺点,即架构不灵活,这使得接收多样化或快速变化的数据变得非常困难。

数据湖 另一方面,数据湖为非结构化和半结构化数据提供了高度适应性的存储,但它们存在治理不善、性能不一致以及数据质量问题,这些问题可能使数据对于关键分析或机器学习操作变得不可信。

共存系统的操作挑战 在公司内部同时使用数据湖和数据仓库意味着更高的运营成本。为了在不同系统之间移动和转换数据,必须构建高度复杂的ETL管道,这最终会导致更多延迟和增加维护工作量。此外,还会出现数据漂移和重复等问题,导致对分析准确性有害的不一致性。

图2:当数据湖和数据仓库分开运行时面临的碎片化挑战

这些局限性凸显了对统一方法的需求,该方法能够结合两个系统的优势,同时减轻其弱点。

什么是数据湖仓?

数据湖仓是一种创新的数据架构,将数据湖和数据仓库的属性整合到一个平台中。其主要目标是提供一个可扩展、灵活的存储解决方案,支持结构化查询、事务可靠性和强大的治理能力,从而跨越原始数据存储和高性能分析之间的界限。 湖仓一体结合了两种系统的能力,从而使企业能够:

  • 在数据湖的规模上,保存所有类型的数据:结构化、半结构化和非结构化。
  • 实现类似数据仓库的ACID事务、模式强制和高性能查询。

主要特征和设计原则包括:

  • 开放性: 其特点是采用开放格式(例如 Parquet、Delta Lake 和 Apache Iceberg),这使得能够互换使用各种工具和引擎。
  • 可靠性: ACID 兼容的事务确保数据始终保持一致和可靠。
  • 治理: 通过集成的血缘关系、元数据管理和访问控制,使合规性和审计的手动处理变得更加容易。
  • 性能: 不仅对存储进行优化,还对计算进行优化,确保快速查询执行和分析。

总体而言,湖仓一体范式承诺成为一个单一的统一平台,所有数据操作都可以轻松执行,无需引入重复,并且可以快速执行分析。此外,该平台可以使组织灵活地管理现代数据工作负载。

湖仓一体的架构组件

当今的湖仓一体建立在融合特性的基础上,包含以下组件:

1. 统一的存储层

现代湖仓一体将所有类型的数据(包括结构化、半结构化和非结构化)视为一体,从而将其全部放入一个对象存储系统(例如 S3、ADLS、GCS)中。这个完整的过程消除了数据湖和数据仓库之间的鸿沟,从而通过消除数据复制和减少需要管理的地方来减轻数据管理负担。

代码:使用 Delta Lake 创建一个简单的湖仓一体表

1
2
3
4
5
6
# 创建 Delta 表示例
spark.sql("""
CREATE TABLE IF NOT EXISTS bronze_sales
USING DELTA
LOCATION 's3://my-lakehouse/bronze/sales'
""")

2. 元数据和表格式

可靠元数据的适当管理在确保 ACID 合规性和查询性能等方面起着重要作用。一些广泛使用的表格式如下:

  • Delta Lake: 通过将 ACID 扩展到对象存储,为对象存储提供支持和模式强制。
  • Apache Iceberg: 这是一种具有多层分区方法的表,可带来更快的查询过程。还提供大规模表版本控制、分区演进和高性能查询。
  • Apache Hudi: 它允许您执行更新插入操作,并处理流数据和批量数据上的增量处理。提供更新插入、增量摄取以及数据湖上的流支持。

图3:现代数据湖仓的核心架构层

3. 计算引擎和查询处理

湖仓一体将存储与计算分离,从而允许不同的引擎高效地提取相同的数据:

  • Spark: 用于批处理和流处理需求的分布式处理。
  • Trino: 对庞大数据集进行快速 SQL 查询。
  • DuckDB: 用于本地或嵌入式查询的小型高效分析引擎。
  • Photon: 增强且快速的查询引擎,适用于大量用户和高性能场景。

4. 治理和目录服务

集成的治理以非常高效且易于监控的方式保护、规范和审计数据的使用:

  • Unity Catalog: 元数据和访问的单一控制点。
  • AWS Glue: 用于 ETL 编排和发现的数据目录,以及现在可以轻松定位的数据的血缘关系跟踪。

5. 数据摄取和转换管道

湖仓一体提供批处理和流式摄取的能力,从而支持可靠的 ETL/ELT 流程。Apache Spark、Flink 或 dbt 等框架确保数据被转换、验证并存储为分析就绪的数据,而不会产生任何额外的存储成本。

6. 平台

基于云和混合技术的各种平台正在应用湖仓一体架构:

  • Databricks: 它是终极托管平台,具有无缝的 Delta Lake 集成和对多个引擎的支持。
  • Snowflake Unistore: 将事务和分析工作负载合并到一个引擎中。
  • Amazon Athena/EMR: 在具有 Iceberg 或 Hudi 集成的 S3 存储上进行无服务器和托管分析。
  • Google BigLake: 在 GCP 上桥接数据湖和数据仓库的统一存储引擎。

湖仓一体如何弥合差距

湖仓一体或混合系统通过合并数据湖和数据仓库来处理这些系统分离的典型问题,提供融合了双方最佳特性的功能:

1. 支持 ACID 事务的开放存储

与数据湖不同,湖仓一体支持 ACID 事务,确保并发读写操作的数据一致性和可靠性。上述事务使得能够在原始存储上进行精确的分析。

2. 模式强制与演进

湖仓一体可以通过模式强制处理数据不足的问题,同时通过模式演进支持数据变化。此功能既允许访问结构化分析,也允许访问广泛且不断变化的数据集。

3. 性能优化

为了能够在大型存储系统上提供与数据仓库相媲美的性能水平,湖仓一体正在实施以下技术:

  • 缓存: 减少对访问非常频繁的数据的 I/O。
  • 索引: 使定位相关数据文件的过程非常快速,因此查询执行速度更快。
  • 文件压缩: 此技术合并小文件以提高读取效率,从而减少开销。

4. 与数据仓库相当的连续性和可靠性

事务保证、元数据管理和性能优化的结合使得湖仓一体能够提供与传统数据仓库相媲美的数据可靠性和一致性水平;然而,却没有通常与之相关的僵化性和分离的存储。

5. 与 ML 和 AI 工作负载的互操作性

湖仓一体成为机器学习 AI 管道的唯一数据存储库,从而使得能够直接执行特征工程、模型训练和评分。

代码:湖仓一体表中 ACID MERGE 操作示例

1
2
3
4
5
MERGE INTO silver_sales AS target
USING bronze_sales_updates AS source
ON target.order_id = source.order_id
WHEN MATCHED THEN UPDATE SET *
WHEN NOT MATCHED THEN INSERT *

通过这些机制,湖仓一体消除了管理独立数据湖和数据仓库的操作摩擦,同时为现代数据工作负载提供灵活、可靠和高性能的分析。

常见的湖仓一体设计模式

现代湖仓一体设计采用各种架构模式,为组织提供坚实的数据管理和工作负载支持基础:

1. 批处理和流处理统一

通过将数据存储在一个层中,湖仓一体消除了批处理和流处理数据之间的鸿沟。这意味着数据可以持续输入系统,同时进行批处理,因此分析始终基于既是最新又一致的数据运行,而无需为存储或复制管道支付额外成本。

2. 奖章架构

青铜/白银/黄金是数据分类最常用的方式,被称为:

  • 青铜层 - 数据未经处理;它是来自来源的原始数据。
  • 白银层 - 数据被清洗和标准化;现在它已经过丰富,可以进行分析。
  • 黄金层 - 数据经过精心整理,可用于报告、BI 和 ML 用途。

这种分层系统不仅保持数据质量和可追溯性,还提高性能并简化了下游数据消费。

图4:奖章架构(青铜 → 白银 → 黄金)

3. 多引擎查询访问

湖仓一体架构允许实现不同的计算引擎来处理相同的数据;因此,像 Spark、Trino 和 DuckDB 这样的引擎可以根据需求进行查询。这种模型提供了灵活性,支持不同类型的分析工作负载,并从单一事实来源中提供了最大的收益。

4. 具有细粒度访问控制的治理层

治理层对数据访问施加严格的限制,并对数据使用、合规性和审计实施严格的控制。基于角色的访问控制、行级和列级权限、血缘关系跟踪和集中式元数据管理等功能是架构的组成部分。

这些设计模式共同赋能组织构建可扩展、可靠和灵活的数据平台,这些平台既支持运营工作负载也支持分析工作负载,同时保持高水平的数据质量和治理标准。

图5:湖仓一体生态系统的技术全景

这些技术共同构成了一个强大的生态系统,使组织能够构建可扩展、可治理且性能卓越的湖仓一体平台,能够支持多样化的分析、报告和 ML/AI 工作负载。

实施考量事项

湖仓一体结构最终可以通过性能、可靠性和可扩展性来收回投资,这些特性在整个过程中与规划者的期望保持一致,主要维度包括存储、模式、治理和成本。

1. 存储格式选择

选择合适的表格式(例如 Delta Lake、Iceberg、Hudi)仍然是一个艰难的决定,可以基于以下考虑做出:

  • 任何事务都必须是可靠的,因此它必须支持 ACID。
  • 模式演进的能力应与不断变化的数据结构保持一致。
  • 应实施查询性能优化,例如分区剪枝和索引。
  • 应结合云对象存储和具有成本效益的可扩展性。

2. 数据建模和模式策略

通过定义良好的模式和建模策略,可以使系统的性能和维护变得容易:

  • 青铜/白银/黄金技能水平对应的层级用于逐步精炼数据。
  • Parquet,一种列式存储格式,用于提高分析处理效率。
  • 一致的命名约定和元数据管理确保可发现性。

3. 处理小文件和压缩

小文件是查询处理效率较低和存储空间增加的主要来源。 应应用以下最佳实践:

  • 自动文件压缩将应用于将小文件合并成一个单一、优化的大文件。
  • 将实施分区策略以协调粒度与性能。
  • 流式摄取的管理将有助于最小化创建过多小文件。

代码:用于管理小文件的自动优化设置

1
2
3
4
ALTER TABLE bronze_sales SET TBLPROPERTIES (
    'delta.autoOptimize.optimizeWrite' = 'true',
    'delta.autoOptimize.autoCompact' = 'true'
)

4. 治理、血缘关系和目录管理

强大的治理允许数据被信任并符合以下要求:

  • 集中式目录服务(Unity Catalog、AWS Glue)用于元数据管理和访问控制。
  • 血缘关系跟踪用于审计和促进数据管道。
  • 细粒度访问控制用于保护敏感数据集并强制执行策略。

5. 成本优化与计算和存储相结合

湖仓一体概念的支柱是解耦的基础设施,支持各种扩展方法,包括:根据工作负载动态扩展计算集群、使用多级存储以找到性能和成本之间的最佳平衡点(例如,热存储与冷存储),以及在计算端实施查询优化方法以降低成本,例如缓存、剪枝和物化视图。 仔细关注这些考虑因素可以确保湖仓一体的实施保持可扩展、高性能和成本效益,支持分析和运营工作负载,而不会牺牲可靠性或治理。

用例

湖仓一体架构通过结合数据湖和数据仓库的优势,可以处理各种现代数据工作负载。一些主要的用例如下:

1. 实时分析

湖仓一体能够摄取流数据并几乎实时地进行查询。因此,组织可以监控其运营、识别问题,并最终做出以数据为导向的决策,延迟非常低。

2. 机器学习和特征存储

湖仓一体作为一个可靠的数据源,这是 ML 管道变得更容易处理的主要原因。可以在湖仓一体上创建特征存储,并通过它,即使是大规模的特征工程、模型训练和评分也可以进行。

3. 高并发的 BI 工作负载

湖仓一体为分析和报告提供了非常好的性能;因此,多个用户和工具可以同时查询非常大的数据集,而不会影响性能或准确性。

4. 企业数据治理与合规性

通过集成的治理、血缘关系跟踪和细粒度访问控制,确保正在使用的数据符合监管机构、内部政策和审计标准的要求,同时使团队之间的协作能够安全地进行。

图6:湖仓一体架构启用的关键分析和 ML 用例

这些用例说明了湖仓一体如何提供一个多功能、统一的平台,能够同时支持运营和分析工作负载,同时降低复杂性并保持高数据质量。

结论

湖仓一体架构被认为是当代数据管理的一项重大进步,它结合了数据湖的灵活性和数据仓库的可靠性与性能。将存储、计算和治理集成到一个平台中,消除了操作摩擦、减少了重复并简化了复杂的 ETL 管道。 采用湖仓一体带来了数据可靠性、分析和 ML 工作负载的高性能以及运营成本节约等长期好处,使团队能够专注于洞察提炼,而不是管理基础设施。 采用现代湖仓一体模式将使组织有信心扩展其数据计划,同时治理将是强大的,成本不会很高,并且组织将能够支持实时分析、机器学习和企业报告。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计