无边界 Lakehouse 的技术架构通过集中管理元数据并通过特定路径处理查询,支持引擎之间的互操作性。
架构
构建 Google Cloud 的 LakehouseLakehouse 包含以下技术组件:
存储: 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 表 以及过渡到 Lakehouse 架构的现有工作负载。
Apache Hive 目录端点(预览版): 为依赖于 Apache Hive metastore (HMS) 接口的开源工作负载提供兼容性。这样,您就可以针对上的全代管式 metastore 服务运行 Apache Hive 或 Spark 工作负载 Google Cloud。
Lakehouse 运行时目录
在资源层次结构中,Lakehouse 运行时目录 充当中的顶级区域元数据服务 Google Cloud。它充当托管各个目录实例的根容器,集中发现不同查询引擎中的元数据。
它实现了开源 Apache Iceberg REST Catalog API 来管理命名空间和表,并专门为 目录管理提供了扩展。
如需深入了解 metastore 服务,包括主要功能, 支持的引擎、端点配置和限制,请参阅 Lakehouse 运行时目录简介。
目录
目录是由 Cloud Storage 仓库位置支持的逻辑 metastore 容器。在 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 表。在 Lakehouse 中使用现有 V1 表之前,您必须将其升级到受支持的版本。如需了解更多 信息,请参阅将 Iceberg V1 表升级到 V2。
BigQuery 支持的表
- Apache Iceberg 表: 由 BigQuery 创建和管理的 Apache Iceberg 表。这些表的元数据存储在 BigQuery 目录中,表数据和物理元数据存储在 Cloud Storage 中。
- 原生表:由 BigQuery 全代管式表,可以连接到 Lakehouse 运行时目录,以便与开源引擎互操作。
- 外部表: Lakehouse 运行时目录之外的表,数据和元数据由用户自行管理。这些表支持通过连接为存储在 Cloud Storage、Amazon S3 或 Azure Blob Storage 中的数据委托访问权限。
如需详细比较这些选项,请参阅了解表类型和功能。
查询处理顺序
当您向由 Lakehouse 管理的 Apache Iceberg 表提交查询时,请求会遵循特定路径来强制执行政策并在处理数据之前检索元数据。
- 提交: 您向兼容的引擎(例如 Apache Spark、Trino 或 BigQuery)提交 SQL 查询。
- 元数据请求: 引擎从 Lakehouse 运行时目录请求表元数据,以标识表及其元数据位置。
- 授权: 如果您使用的端点支持,目录会根据 Identity and Access Management (IAM) 和精细的安全政策验证请求。
- 元数据响应: 目录会返回元数据。如果启用了凭据销售,它还会提供短期有效的令牌,以帮助确保存储访问安全。
- 数据检索: 引擎使用元数据和可选令牌直接从 Cloud Storage 读取数据文件。
- 执行: 引擎处理数据并返回结果。
最佳实践
在 Google Cloud 上设计和运营数据湖仓一体时,请考虑以下最佳实践:
- 采用奖章架构: 将数据仓库构建为渐进式逻辑层(青铜层用于原始提取,白银层用于经过清理和规范化的数据,黄金层用于精选的业务级汇总)。将 BigQuery 用于黄金层,以最大限度地提高查询性能和并发性。
- 使用会话模板处理交互式工作负载: 对于探索性分析和笔记本编写,请使用会话模板来标准化开发团队之间的环境配置,并减少重复设置。
- 分配自定义批次标识符: 提交非交互式无服务器 Apache Spark 批处理工作负载时,请分配自定义批次和作业名称。这有助于提高可观测性,从而帮助您在 Cloud Logging 和 Google Cloud 控制台中过滤和跟踪作业 执行情况。
- 启用诊断日志记录: 对于复杂的数据工程流水线,请启用诊断软件包并确保保留驱动程序和执行程序日志,以帮助进行问题排查和支持。
后续步骤
- 如需深入了解 metastore 服务,请参阅 About the Lakehouse 运行时目录。
- 将 Lakehouse 运行时目录与 Apache Spark、 BigQuery 和 Apache Iceberg REST 目录端点搭配使用。