大数据分析版图不断演进,组织正寻求更灵活、可扩展且具成本效益的方式来管理与分析海量数据。这一追求催生了数据湖仓范式,它将数据湖的低成本存储与灵活性,与数据仓库的数据管理能力和事务一致性相结合。站在这场变革中心的是 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.pswp.cn/news/918518.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/918518.shtml
英文地址,请注明出处:http://en.pswp.cn/news/918518.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【PyTorch学习笔记 - 02】 Datasets DataLoaders

前言 处理数据样本的代码可能会变得杂乱无章且难以维护;为了获得更好的可读性和模块化,我们理想的情况是将数据集代码与模型训练代码解耦。PyTorch 提供了两个数据处理类: torch.utils.data.DataLoader 和 torch.utils.data.Dataset&#x…

JavaWeb 30 天入门:第七天 —— 异常处理机制

在前六天的学习中,我们掌握了 Java 的基础语法、面向对象核心特性、抽象类与接口等知识。今天我们将学习 Java 中的异常处理机制,这是保证程序健壮性的关键技术。在 JavaWeb 开发中,无论是用户输入错误、数据库连接失败还是网络异常&#xff…

编译器默认生成的c++类六大成员函数

编译器默认生成的c类六大成员函数 编译器默认生成的六大成员函数 当你定义一个空类时,例如: class Empty {};如果代码中没有显式定义任何成员函数,C编译器会在需要时(例如,代码中实际调用了这些函数)为你…

人工智能概念:常见的大模型微调方法

文章目录一、微调技术的底层逻辑1.1 预训练与微调的关系1.2 核心目标:适配任务与数据二、经典微调方法详解2.1 全量微调(Full Fine-Tuning)2.2 冻结层微调(Layer-Freezing Fine-Tuning)2.3 参数高效微调(Pa…

动态路由协议(一)

1. 动态路由 概述 静态路由在大网络里太麻烦(设备多、配置量大,拓扑变了还要手动改) 静态路由是由工程师手动配置和维护的路由条目,命令行简单明确,适用于小型或稳定的网络。静态路由有以下问题: 无法适…

LINUX812 shell脚本:if else,for 判断素数,创建用户

问题 [rootweb ~]# for((i2;i<n;i)) > if [ $n -ne $i ] && [ $((n%i)) -eq 0 ];then -bash: 未预期的符号 if 附近有语法错误 您在 /var/spool/mail/root 中有邮件 [rootweb ~]#[rootweb ~]# cat judgeprimeok.sh declare -i n read -p "please type the n…

游戏中角色持枪:玩家操控角色,角色转向时枪也要转向

角色持有枪&#xff0c;玩家&#xff08;你&#xff09;操控角色&#xff0c;那么&#xff0c;在角色转向时&#xff0c;枪也要转向。 先看看简单情况&#xff1a;假定角色只面向左或右方向&#xff0c;pygame中用这句来实现&#xff1a;pos self.facing * self.gun_offset s…

深度学习入门Day8:生成模型革命——从GAN到扩散模型

一、开篇&#xff1a;创造力的算法革命从昨天的Transformer到今天的生成模型&#xff0c;我们正从"理解"世界迈向"创造"世界。生成对抗网络(GAN)和扩散模型(Diffusion Model)代表了当前生成式AI的两大主流范式&#xff0c;它们让机器能够生成逼真的图像、音…

基于WRF-Chem的不同气溶胶的辐射效应的研究

前言目前我对于气溶胶辐射效应的理解就是设计敏感性实验&#xff0c;基础实验打开气溶胶参与辐射开关&#xff08;aer_ra_feedback&#xff09;&#xff0c;其他的实验则关闭气溶胶参与辐射过程开关&#xff0c;也有去掉某些气溶胶的影响&#xff0c;如黑碳&#xff08;BC&…

专题:2025人形机器人与服务机器人技术及市场报告|附130+份报告PDF汇总下载

原文链接&#xff1a;https://tecdat.cn/?p43583 当特斯拉Optimus在工厂里精准分拣电池&#xff0c;当普渡机器人在酒店完成跨楼层配送&#xff0c;一个万亿级的智能革命正在拉开序幕。服务机器人与人形机器人不再是实验室里的概念&#xff0c;而是正在重塑制造业、服务业的“…

JS 模块化与打包工具

一、模块化体系&#xff1a;ESM vs CJS 深入1.语法与静态性(1)ESM:静态语法&#xff0c;可被打包器做 Tree-shakingexport function play() {}export default ...import { play } from ./mod.js(2)CJS:运行时 require() , 分析能力弱&#xff0c;不利于 Tree-shaking2.Node 解析…

防御保护11

带宽管理 --- 设备对自身的流量进行管理和控制&#xff0c;去提供带宽保证、带宽限制等等功能。 带宽限制 带宽保证 连接数限制 应用场景 实现带宽管理 带宽通道 --- 定义了被管理对象所能使用的带宽资源 整体的保证带宽和最大带宽&#xff1b; SW1-SW2&#xff1a;VLAN 201 --…

[激光原理与应用-254]:理论 - 几何光学 - 自动对焦的原理

自动对焦&#xff08;Auto Focus, AF&#xff09;是现代光学系统&#xff08;如相机、手机摄像头、监控设备等&#xff09;的核心功能之一&#xff0c;其原理是通过检测成像面的清晰度或测量物体距离&#xff0c;驱动透镜组移动至最佳对焦位置。以下是自动对焦的详细原理及技术…

【Python办公】Mermaid代码转图片工具 - Tkinter GUI版本

目录 专栏导读 项目简介 功能特性 🎨 直观的图形界面 📝 代码编辑功能 🖼️ 图片生成与预览 💾 文件操作 ⚡ 性能优化 技术架构 核心技术栈 架构设计 安装与使用 环境要求 依赖安装 运行程序 使用步骤 代码示例 基本流程图 时序图 甘特图 核心代码解析 1. 主类结构 2. …

【Activiti】要点初探

Activiti 7.0.0配置 流程配置节点流程XML流程部署部署后会操作表&#xff1a;&#xff08;每部署一次增加一条记录&#xff09; ACT_RE_DEPLOYMENT 流程定义部署表 ACT_RE_PROCDEF 流程定义表 ACT_GE_BYTEARRAY 流程启动查看任务&#xff08;张三要查看准备办理任务&#xff0…

VBS 字符串处理

一. 字符串是由Unicode字符组成的一串字符。通常由数字&#xff0c;字母&#xff0c;符号组成。二. 常用函数1. 消除空格 Ltrim: 删除字符串左侧的空格。 Rtrim: 删除字符串右侧的空格。 trim: 删除字符串左侧和右侧的空格。a" hello " b"sx"msgbo…

《算法导论》第 21 章-用于不相交集合的数据结构

引言不相交集合&#xff08;Disjoint Set&#xff09;&#xff0c;也称为并查集&#xff08;Union-Find&#xff09;&#xff0c;是一种非常实用的数据结构&#xff0c;主要用于处理一些元素分组的问题。它支持高效的集合合并和元素查找操作&#xff0c;在很多算法中都有重要应…

基于51单片机RFID智能门禁系统红外人流量计数统计

1 系统功能介绍 本设计基于STC89C52单片机&#xff0c;集成RFID读卡器、红外避障传感器、继电器、LCD1602液晶显示和蜂鸣器&#xff0c;实现智能门禁与人流量统计功能。系统能够识别合法的RFID卡开门&#xff0c;并实时统计通过人数&#xff0c;具有安全报警和直观显示功能。具…

c#,vb.net全局多线程锁,可以在任意模块或类中使用,但尽量用多个锁提高效率

Public ReadOnly LockObj As New Object() 全局多线程锁 VB.NET模块中的LockObj 可以在任意模块或类中使用吧 在 VB.NET 中&#xff0c;模块&#xff08;Module&#xff09;中声明的 Public ReadOnly LockObj 可以被其他模块或类访问和使用&#xff0c;但需要注意其可见性范围…

企业安全运维服务计划书

安全运维服务计划书 一、概述 为保障企业信息系统安全、稳定、高效运行,防范各类网络安全风险,提升整体安全防护能力,特制定本安全运维服务计划书。本计划旨在通过系统化、规范化的安全运维流程,全面识别、评估、处置并持续监控企业网络环境中的安全风险,构建主动防御与…