当前位置: 首页 > news >正文

用 Apache Iceberg 与 Apache Spark 在 Google Cloud 打造高性能、可扩展的数据湖仓

大数据分析版图不断演进,组织正寻求更灵活、可扩展且具成本效益的方式来管理与分析海量数据。这一追求催生了数据湖仓范式,它将数据湖的低成本存储与灵活性,与数据仓库的数据管理能力和事务一致性相结合。站在这场变革中心的是 Apache Iceberg 等开放表格式与 Apache Spark 等强大处理引擎,而这些都运行在坚实可靠的 Google Cloud 基础设施之上。

Apache Iceberg 的崛起:数据湖的变革者

多年来,构建在云对象存储(如 Google Cloud Storage,GCS)上的数据湖具备无与伦比的可扩展性与成本效率。然而,它们常常缺少传统数据仓库中的关键特性,比如事务一致性、模式(Schema)演进,以及面向分析查询的性能优化。Apache Iceberg 正是在这一点上大放异彩。

Apache Iceberg 是一种开放表格式,旨在解决上述局限。它位于云存储中的数据文件(如 Parquet、ORC 或 Avro)之上,通过一层元数据将文件集合转化为高性能、类 SQL 的表。Iceberg 的强大之处在于:

  • ACID 合规:Iceberg 为数据湖带来原子性、一致性、隔离性和持久性(ACID)属性。这意味着数据写入是事务性的,即便有并发操作也能确保数据完整性,不再出现部分写入或读到不一致数据的问题。
  • 模式演进:在传统数据湖中,管理模式变更是令人头疼的大问题。Iceberg 无缝处理模式演进,允许在不重写底层数据的情况下添加、删除、重命名或重排列,这对敏捷数据开发至关重要。
  • 隐藏分区:Iceberg 智能管理分区,屏蔽数据物理布局。用户无需了解分区方案即可编写高效查询,并且你可以随时间演进分区策略而无需进行数据迁移。
  • 时光回溯与回滚:Iceberg 维护完整的表快照历史。这使“时光回溯”查询成为可能,可以按任意过去时间点查询数据;同时也提供回滚能力,让你将表恢复到此前的良好状态,这对调试与数据恢复价值巨大。
  • 性能优化:Iceberg 丰富的元数据让查询引擎能够高效裁剪无关的数据文件与分区,大幅加速查询执行。它避免代价高昂的文件列举操作,能够基于元数据直接定位相关数据。

借助在数据湖之上提供这些“类数据仓库”能力,Apache Iceberg 使真正的“数据湖仓”成为可能:既拥有云存储的灵活性和成本优势,又具备结构化表的可靠性和性能。

BigQuery 中面向 Apache Iceberg 的 BigLake 表在 Google Cloud 上提供了类似标准 BigQuery 表的全托管体验,但所有数据均存放于客户自有的存储桶中。支持的特性包括:

  • 通过 GoogleSQL 数据操作语言(DML)进行表变更
  • 使用 Storage Write API 统一批处理与高吞吐流式写入(通过 Spark 等 BigLake 连接器)
  • Iceberg V2 快照导出,并在每次表变更时自动刷新
  • 通过模式演进更新列元数据
  • 自动存储优化
  • 历史数据的时光回溯访问
  • 列级安全与数据脱敏

以下是使用 GoogleSQL 创建一个空的 BigLake Iceberg 表的示例:

SQL

CREATE TABLE PROJECT_ID.DATASET_ID.my_iceberg_table ( name STRING, id INT64 ) WITH CONNECTION PROJECT_ID.REGION.CONNECTION_ID OPTIONS ( file_format = 'PARQUET', table_format = 'ICEBERG', storage_uri = 'gs://BUCKET/PATH' );

随后你可以通过 LOAD DATA 将文件中的数据导入该表,或使用 INSERT INTO 从其他表写入数据。

SQL

从文件加载

LOAD DATA INTO PROJECT_ID.DATASET_ID.my_iceberg_table FROM FILES ( uris = ['gs://bucket/path/to/data'], format = 'PARQUET' );

从表加载

INSERT INTO PROJECT_ID.DATASET_ID.my_iceberg_table SELECT name, id FROM PROJECT_ID.DATASET_ID.source_table

除了全托管形态,Apache Iceberg 还可在 BigQuery 中作为只读外部表使用。可将其指向已有数据文件路径。

SQL

CREATE OR REPLACE EXTERNAL TABLE PROJECT_ID.DATASET_ID.my_external_iceberg_table WITH CONNECTION PROJECT_ID.REGION.CONNECTION_ID OPTIONS ( format = 'ICEBERG', uris = ['gs://BUCKET/PATH/TO/DATA'], require_partition_filter = FALSE );

Apache Spark:数据湖仓分析引擎

Apache Iceberg 为数据湖仓提供结构与管理,而 Apache Spark 则是让其“动起来”的处理引擎。Spark 是一个强大的开源分布式处理系统,以其速度、通用性以及处理多样化大数据工作负载的能力而闻名。Spark 的内存计算能力、丰富的生态(覆盖机器学习与基于 SQL 的处理)以及对 Iceberg 的深度支持,使其成为理想之选。

Apache Spark 深度集成于 Google Cloud 生态。将 Spark 运行在 Google Cloud 上的优势包括:

  • 使用 Google Cloud Serverless for Apache Spark,获得无需集群运维的真正无服务器体验
  • 通过 Dataproc 获得全托管 Spark 体验,并可灵活配置与管理集群
  • 使用 Apache Spark Lightning Engine(预览)加速 Spark 作业
  • 预装 GPU 与驱动的运行时配置
  • 在 Spark 运行时中开箱即用多种 AI/ML 库,包含 XGBoost、PyTorch 与 Transformers
  • 在 BigQuery Studio 中通过 Colab Enterprise 笔记本直接编写 PySpark 代码,并借助 Gemini 生成 PySpark 代码
  • 轻松连接 BigQuery 原生表、BigLake Iceberg 表、外部表与 GCS 中的数据
  • 与 Vertex AI 集成,支持端到端 MLOps

Iceberg + Spark:强强联合

Iceberg 与 Spark 搭配,为构建高性能、可靠的数据湖仓提供强大组合。Spark 可利用 Iceberg 的元数据优化查询计划、高效裁剪数据,并在数据湖范围内确保事务一致性。

你的 Iceberg 表与 BigQuery 原生表可通过 BigLake Metastore(BigLake 元存储)访问。该方式将具备 BigQuery 兼容性的表暴露给开源引擎(包括 Spark)。

Python

from pyspark.sql import SparkSession

创建 Spark 会话

spark = SparkSession.builder
.appName("BigLake Metastore Iceberg")
.config("spark.sql.catalog.CATALOG_NAME", "org.apache.iceberg.spark.SparkCatalog")
.config("spark.sql.catalog.CATALOG_NAME.catalog-impl", "org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog")
.config("spark.sql.catalog.CATALOG_NAME.gcp_project", "PROJECT_ID")
.config("spark.sql.catalog.CATALOG_NAME.gcp_location", "LOCATION")
.config("spark.sql.catalog.CATALOG_NAME.warehouse", "WAREHOUSE_DIRECTORY")
.getOrCreate() spark.conf.set("viewsEnabled", "true")

使用 blms_catalog

spark.sql("USE CATALOG_NAME;") spark.sql("USE NAMESPACE DATASET_NAME;")

为临时结果配置 Spark

spark.sql("CREATE namespace if not exists MATERIALIZATION_NAMESPACE") spark.conf.set("materializationDataset", "MATERIALIZATION_NAMESPACE")

列出数据集中的表

df = spark.sql("SHOW TABLES;") df.show()

查询表

sql = """SELECT * FROM DATASET_NAME.TABLE_NAME""" df = spark.read.format("bigquery").load(sql) df.show()

sql = """SELECT * FROM DATASET_NAME.ICEBERG_TABLE_NAME""" df = spark.read.format("bigquery").load(sql) df.show()

sql = """SELECT * FROM DATASET_NAME.READONLY_ICEBERG_TABLE_NAME""" df = spark.read.format("bigquery").load(sql) df.show()

在 BigLake Metastore 的基础上,Iceberg REST Catalog(预览版)可将 Iceberg 数据暴露给任意数据处理引擎。以下是在 Spark 中连接的示例:

Python

import google.auth from google.auth.transport.requests import Request from google.oauth2 import service_account import pyspark from pyspark.context import SparkContext from pyspark.sql import SparkSession

catalog = "" spark = SparkSession.builder.appName("")
.config("spark.sql.defaultCatalog", catalog)
.config(f"spark.sql.catalog.{catalog}", "org.apache.iceberg.spark.SparkCatalog")
.config(f"spark.sql.catalog.{catalog}.type", "rest")
.config(f"spark.sql.catalog.{catalog}.uri", "https://biglake.googleapis.com/iceberg/v1beta/restcatalog")
.config(f"spark.sql.catalog.{catalog}.warehouse", "gs://")
.config(f"spark.sql.catalog.{catalog}.token", "")
.config(f"spark.sql.catalog.{catalog}.oauth2-server-uri", "https://oauth2.googleapis.com/token")
.config(f"spark.sql.catalog.{catalog}.header.x-goog-user-project", "")
.config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions")
.config(f"spark.sql.catalog.{catalog}.io-impl", "org.apache.iceberg.hadoop.HadoopFileIO")
.config(f"spark.sql.catalog.{catalog}.rest-metrics-reporting-enabled", "false")
.getOrCreate()

完善湖仓版图

Google Cloud 提供一套与 Apache Iceberg 与 Apache Spark 相辅相成的完整服务,帮助你在沿用开源技术栈的同时,轻松构建、管理与扩展数据湖仓:

  • Dataplex 通用目录(Universal Catalog):提供跨数据湖、数据仓库与数据集市的统一数据织体,用于管理、监控与治理数据。它与 BigLake Metastore 集成,确保治理策略在 Iceberg 表上得到一致执行,并支持语义检索、数据血缘与数据质量检查等能力。
  • Google Cloud 托管版 Apache Kafka:在 Google Cloud 上运行全托管的 Kafka 集群(含 Kafka Connect)。数据流可直接写入 BigQuery,包括以低延迟读取托管的 Iceberg 表。
  • Cloud Composer:基于 Apache Airflow 的全托管工作流编排服务。
  • Vertex AI:用于管理端到端的 MLOps 体验。你也可以使用 Vertex AI Workbench(托管 JupyterLab)连接到无服务器 Spark 与 Dataproc 实例。

结语

在 Google Cloud 上结合 Apache Iceberg 与 Apache Spark,为构建现代化、高性能的数据湖仓提供了极具吸引力的解决方案。Iceberg 赋予数据湖事务一致性、模式演进与性能优化,而 Spark 则提供通用且可扩展的引擎来处理这些大规模数据集。

想了解更多,请参加我们于 7 月 8 日太平洋时间上午 11 点举办的免费网络研讨会,届时我们将深入讲解如何在 Google Cloud 上使用 Apache Spark 及其配套工具。

http://www.dtcms.com/a/327528.html

相关文章:

  • 增加vscode 邮件菜单
  • 备战国赛算法讲解——马尔科夫链,2025国赛数学建模B题详细思路模型更新
  • 7 种最佳 DBAN 替代方案,彻底擦除硬盘数据
  • vue excel转json功能 xlsx
  • 【CV 目标检测】②——NMS(非极大值抑制)
  • springboot+JPA
  • 卓伊凡谈AI编程:历史、现状与未来展望-以前面向搜索引擎现在面向AI机器人-优雅草卓伊凡
  • 解释 Spring MVC 的工作原理
  • web应用服务器——Tomcat
  • C语言中关于普通变量和指针变量、结构体包含子结构体或包含结构体指针的一些思考
  • 车载5G加速,扩产+毛利率保卫战
  • 随身WIFI每个月需要交钱吗?流量卡还是随身WIFI哪个更好用?正规随身WIFI品牌有哪些?谁才是真性价比之王?
  • Linux下命名管道和共享内存
  • 云原生作业(nginx)
  • 云原生环境Prometheus企业级监控实战
  • 将黑客拒之物联网网络之外的竞赛
  • 2.Ansible基本使用
  • 9. React组件生命周期
  • 使用镜像网站 打开克隆 GitHub 网站仓库内容 git clone https://github.com/
  • 跟李沐动手学深度学习---学习笔记之基础篇
  • ForceVLA——将具备力感知的MoE整合进π0的动作专家中:从而融合视觉、语言、力反馈三者实现精密插拔
  • 【USRP】基于LabVIEW的BPSK、QPSK,文本,图片
  • n8n、Workflow实战
  • Redis序列化配置类
  • 【从零开始java学习|第四篇】IntelliJ IDEA 入门指南
  • 采暖管道安装、分类、计量-文字查找快速定位、批量测量一键计算
  • OBOO鸥柏丨智能会议平板教学查询一体机交互式触摸终端招标投标核心标底参数要求
  • 115-基于Flask的医疗保健数据预测分析系统
  • 2025年渗透测试面试题总结-15(题目+回答)
  • 【前端Vue】如何优雅地展示带行号的日志文件或文本内容(log-viewer组件的使用)