无边界 Lakehouse 的技术架构通过集中管理元数据和通过特定路径处理查询,支持引擎之间的互操作性。
架构
构建 Google Cloud 的Lakehouse包含以下技术组件:
存储:Cloud Storage 和 BigQuery 存储空间用作存储层,建议使用 Apache Iceberg 作为开放式表格式,以便在 Cloud Storage 中实现高性能、可互操作的存储。借助无边界 Lakehouse,您的数据无需驻留在 Google Cloud中。通过设置与受支持的远程目录的跨云连接,您可以将数据保留在其他云端存储空间(例如 Amazon S3)中,并直接查询这些数据,而无需迁移文件或构建 ETL 流水线。
目录:Lakehouse 运行时目录提供了一个可信来源,用于管理元数据。它使用各种兼容性选项(例如 Apache Iceberg REST 目录端点)跨多个引擎集中元数据发现。向目录注册表会自动向业务元数据 Knowledge Catalog 注册条目。
查询引擎: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) 接口的开源工作负载提供兼容性。这样,您就可以在 Google Cloud上针对全代管式 Metastore 服务运行 Apache Hive 或 Spark 工作负载。
Lakehouse 运行时目录
在资源层次结构中,Lakehouse 运行时目录充当 Google Cloud中的顶级区域级元数据服务。它充当根容器,托管您的各个目录实例,集中管理不同查询引擎的元数据发现。
它实现了开源 Apache Iceberg REST Catalog API 来管理命名空间和表,并提供专门用于目录管理的扩展。
如需深入了解 Metastore 服务,包括关键功能、支持的引擎、端点配置和限制,请参阅 Lakehouse 运行时目录简介。
目录
目录是由 Cloud Storage 仓库位置支持的逻辑 metastore 容器。在 Project.Catalog.Namespace.Table (P.C.N.T) 命名结构中,目录表示将开放表元数据与查询引擎连接起来的唯一元存储实例。
目录的主要特征包括:
- 存储关联:目录与其底层存储之间的关系取决于您配置的目录类型。
- 区域级复制:目录的区域会自动与底层存储桶的区域匹配。
- 访问权限委托:管理员可以在目录上启用凭据分发功能来委托访问权限,从而自动生成范围缩小的短期凭据,而不是直接向用户授予存储桶权限。
命名空间
命名空间是目录中表的逻辑分组,其功能类似于数据库、架构或 BigQuery 数据集。它提供了一种结构,用于整理和管理表的访问权限控制。
命名空间的主要特征包括:
- 区域性:创建命名空间时,它会自动使用与其父级目录相同的区域。
- 位置灵活性:用于指定自定义命名空间位置的选项由目录的仓库类型决定。
- 嵌套限制:不支持嵌套命名空间(子命名空间)。
- 安全边界:您可以在命名空间级层授予 IAM 角色,以管理对其中包含的所有表的访问权限。
表
使用 Google Cloud 的 Lakehouse 构建时,您可以从以下表类型中进行选择:
受 Lakehouse 运行时目录支持
推荐
Apache Iceberg 表:通过开源引擎创建并存储在 Cloud Storage 中的 Apache Iceberg 表。这些表通过 Lakehouse 运行时目录 REST 端点提供开放兼容性和管理功能。为确保没有两个表占用同一位置,自定义表路径必须嵌套在父命名空间路径下,并且生成的表位置会自动接收随机字符串后缀,以防止冲突。
支持的表格式
支持 Apache Iceberg V2 表(正式版)和 V3 表(预览版)。 不支持 Iceberg V1 表。在将现有 V1 表与 Lakehouse 搭配使用之前,您必须将其升级到受支持的版本。如需了解详情,请参阅将 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 服务,请参阅 Lakehouse 运行时目录简介。
- 将 Lakehouse 运行时目录与 Apache Spark、BigQuery 和 Apache Iceberg REST 目录端点搭配使用。