Lakehouse for Apache Iceberg 的技术架构通过集中式元数据管理和通过特定路径处理查询,支持引擎之间的互操作性。
架构
构建 Google Cloud 的Lakehouse架构包含以下技术组件:
存储:Cloud Storage 和 BigQuery 存储空间充当存储层,建议使用 Apache Iceberg 作为开放式表格式,以便在 Cloud Storage 中实现高性能、可互操作的存储。
目录:Lakehouse 运行时目录提供了一个可信来源,用于管理元数据。它使用各种兼容性选项(例如 Apache Iceberg REST 目录端点)集中化了跨多个引擎的元数据发现。将表注册到目录中会自动将条目注册到业务元数据知识目录中。
查询引擎:BigQuery 和开源引擎(包括 Apache Spark、Apache Flink 和 Trino)通过连接到 Lakehouse 运行时目录,可实现无缝互操作。Managed Service for Apache Spark 等计算引擎使用开源 Apache Spark 并进行执行优化,以帮助确保工作负载可移植性并避免供应商锁定。
治理:Knowledge Catalog 可在整个湖仓一体架构中提供集中式安全性、沿袭和治理政策。
数据写入和分析工具:集成式引擎和工具可提供多种数据注入和分析途径,有助于确保数据科学家和分析师都能以一致的方式访问数据。
资源层次结构
Google Cloud 的 Lakehouse 使用与 Apache Iceberg 标准和标准数据库概念相符的层次结构来整理数据。借助此结构,Lakehouse 运行时目录可以将逻辑身份映射到物理存储路径。如需与此资源层次结构互动并将查询引擎连接到目录,您可以使用特定端点,如下表中所述。
- Lakehouse 运行时目录: Google Cloud 中托管元数据的顶级区域服务资源。如需将查询引擎连接到此服务并管理底层目录,您可以使用特定的目录端点(例如 Apache Iceberg REST 目录端点)配置客户端应用。
- 目录:运行时目录服务中的逻辑容器。在项目/目录/命名空间/表 (P.C.N.T) 命名结构中,这表示您要查询的特定目录实例。
- 命名空间:目录中表的逻辑分组。对于熟悉 BigQuery 的用户,命名空间在功能上类似于数据集。
- 表:指向 Cloud Storage 中数据的特定实体。表元数据包含架构、分区信息,以及通过 Apache Iceberg
metadata.json文件指向当前表状态的指针。
支持的端点
Lakehouse 运行时目录提供多个端点,用于连接 Cloud Storage 和 BigQuery 中的数据。
Apache Iceberg REST 目录端点:提供标准 REST 接口,可广泛兼容 Apache Spark、Apache Flink 和 Trino 等开源引擎。这是建议用于新工作负载的接口,可提供完整的读写互操作性。
BigQuery 端点的自定义 Apache Iceberg 目录:使引擎能够直接与 BigQuery 目录进行互操作。此接口主要用于由 BigQuery 管理的 Apache Iceberg 表以及正在向湖仓一体架构过渡的现有工作负载。
Apache Hive Catalog 端点(预览版):为依赖于 Apache Hive metastore (HMS) 接口的开源工作负载提供兼容性。这样一来,您就可以在 Google Cloud上针对全代管式 metastore 服务运行 Apache Hive 或 Spark 工作负载。
Lakehouse 运行时目录
在资源层次结构中,Lakehouse 运行时目录充当 Google Cloud中的顶级区域元数据服务。它充当托管各个目录实例的根容器,可集中在不同的查询引擎中发现元数据。
它实现了开源 Apache Iceberg REST Catalog API,用于管理命名空间和表,并提供专门用于目录管理的扩展程序。
如需深入了解元存储服务,包括主要功能、支持的引擎、端点配置和限制,请参阅关于 Lakehouse 运行时目录。
目录
目录是由 Cloud Storage 数据仓库位置提供支持的逻辑元数据存储区容器。在 Project.Catalog.Namespace.Table (P.C.N.T) 命名结构中,目录表示将开放表元数据与查询引擎相关联的唯一 metastore 实例。
目录的主要特征包括:
- 存储关联:目录与其底层存储之间的关系取决于您配置的目录类型。
- 区域复制:目录的区域会自动与底层存储桶的区域保持一致。
- 访问权限委托:管理员可以在目录中启用凭据自动生成功能,以委托访问权限,从而自动生成范围缩减的短期凭据,而不是向用户授予直接存储桶权限。
命名空间
命名空间是目录中表的逻辑分组,其功能类似于数据库、架构或 BigQuery 数据集。它提供了一种用于整理和管理表访问权限控制的结构。
命名空间的主要特征包括:
- 区域性:创建命名空间时,系统会自动使用与其父目录相同的区域。
- 位置灵活性:用于指定自定义命名空间位置的选项由目录的仓库类型决定。
- 嵌套限制:不支持嵌套命名空间(子命名空间)。
- 安全边界:您可以在命名空间级层授予 IAM 角色,以管理对其中包含的所有表的访问权限。
表
使用 Google Cloud 的 Lakehouse 进行构建时,您可以选择以下表类型:
受 Lakehouse 运行时目录支持
推荐
Apache Iceberg 表:通过开源引擎创建并存储在 Cloud Storage 中的 Apache Iceberg 表。这些功能通过 Lakehouse 运行时目录 REST 端点提供开放的兼容性和管理功能。为确保没有两个表占用同一位置,自定义表路径必须嵌套在父命名空间路径下,并且生成的表位置会自动接收随机字符串后缀以防止冲突。
支持的表格格式
支持 Apache Iceberg V2 表(正式版)和 V3 表(预览版)。 不支持 Iceberg V1 表。在将现有 V1 表与 Lakehouse for Apache Iceberg 搭配使用之前,您必须将这些表升级到受支持的版本。如需了解详情,请参阅将 Iceberg V1 表升级到 V2。
BigQuery 支持
- Apache Iceberg 表:由 BigQuery 创建和管理的 Apache Iceberg 表。这些表的元数据存储在 BigQuery 目录中,而表数据和物理元数据存储在 Cloud Storage 中。
- 原生表:由 BigQuery 全代管式表,可连接到 Lakehouse 运行时目录,以便您与开源引擎进行互操作。
- 外部表:Lakehouse 运行时目录之外的表,其中的数据和元数据由用户自行管理。这些连接支持对 Cloud Storage、Amazon S3 或 Azure Blob Storage 中存储的数据进行委托访问。
如需详细比较这些选项,请参阅了解表类型和功能。
查询处理顺序
当您向 Google Cloud 的 Lakehouse 表提交查询时,请求会遵循特定路径来强制执行政策并检索元数据,然后才会处理数据。
- 提交:您向兼容的引擎(例如 Apache Spark、Trino 或 BigQuery)提交 SQL 查询。
- 元数据请求:引擎从 Lakehouse 运行时目录请求表元数据,以识别表及其元数据位置。
- 授权:如果您使用的端点支持,目录会根据 Identity and Access Management (IAM) 和精细的安全政策验证请求。
- 元数据响应:目录返回元数据。如果凭据贩售已启用,它还会提供一个短期有效的令牌,以帮助实现安全的存储访问。
- 数据检索:引擎使用元数据和可选令牌直接从 Cloud Storage 读取数据文件。
- 执行:引擎处理数据并返回结果。
最佳做法
在 Google Cloud 上设计和运营数据湖仓一体时,请考虑以下最佳实践:
- 采用奖章架构:将数据仓库构建为渐进式逻辑层(青铜层用于原始提取,白银层用于清理和规范化数据,黄金层用于精选的业务级汇总)。使用 BigQuery 作为黄金消费层,以最大限度地提高查询性能和并发性。
- 为交互式工作负载使用会话模板:对于探索性分析和笔记本撰写,请使用会话模板来标准化开发团队之间的环境配置,并减少重复设置。
- 分配自定义批处理标识符:提交非交互式无服务器 Apache Spark 批处理工作负载时,分配自定义批处理名称和作业名称。这有助于提高可观测性,从而帮助您在 Cloud Logging 和 Google Cloud 控制台中过滤和跟踪作业执行情况。
- 启用诊断日志记录:对于复杂的数据工程流水线,启用诊断软件包,并确保保留驱动程序和执行程序日志,以帮助进行问题排查和支持。