返回
RSS AWS Big Data Blog AI 逐段翻译 发布 2026-08-25 03:06

AWS Glue 6.0发布:降价30%并优化数据集成性能

DataHot 速览

AWS Glue 6.0正式发布,作为无服务器数据集成服务,新版本将定价降低30%,并基于Apache Spark 4.1优化运行性能。该版本支持Apache Iceberg V3规范,包括VARIANT数据类型、删除向量、行级血缘追踪等功能,并新增声明式管道、实时模式等特性。整体上旨在帮助企业以更低成本、更快速度运行大规模数据处理管道。

为什么值得关注:数据集成是数据平台建设的关键环节,AWS Glue 6.0在成本、性能和开放表格式支持上的升级直接影响数据管道架构选型。

本文目录 11 节
  1. AWS Glue 6.0 亮点
  2. 运行时升级
  3. 降价
  4. 更新的开放表格式 (OTF) 支持
  5. 前提条件
  6. 步骤
  7. 新的 ETL 功能
  8. 依赖库升级
  9. 入门
  10. 清理
  11. 结论

译文

AI 逐段翻译

运行大型数据处理管道的组织希望降低成本、加快作业运行时间,并可靠支持开放表格式,同时不增加运维负担。AWS Glue是一种无服务器、可扩展的数据集成服务,可用于发现、准备、移动和集成来自多个来源的数据,现已推出新版本 AWS Glue 6.0,以解决这些需求。此版本升级将AWS Glue 定价降低 30%,并通过 AWS 优化的 Apache Spark 4.1 提升性能。它还通过新功能增强了开发人员体验,并增加了对Apache Iceberg V3 规范的支持,适合企业采用。新推出的 AWS Glue 6.0 使数据处理工作负载更易于管理、运行更快、操作更简单。

在本文中,我们涵盖了AWS Glue 6.0的关键功能及其性能优势。我们分享代码示例以帮助您充分利用此版本,并展示如何开始使用。

AWS Glue 6.0 亮点

AWS Glue 6.0 汇集了四项重大改进,旨在改变您构建和运行数据集成工作负载的方式。

首先,它将底层运行时升级到 Apache Spark 4.1.1、Python 3.13、Scala 2.13 和AWS SDK for Java 2.x,带来性能改进,有助于缩短作业完成时间并降低成本。

其次,此版本将当前AWS Glue 使用费率降低 30%,结合性能改进,您可能会实现更低的实际成本。

第三,AWS Glue 6.0 引入了对Apache Iceberg V3更多功能的支持。这包括具有自动分片的 VARIANT 数据类型、删除向量、行谱系跟踪、纳秒时间戳和地理类型。借助这些功能,您可以在最新的开放表格式标准上构建现代湖仓架构。

最后,Spark 声明式管道、流式实时模式以及带有 S3 缓存的 Python 虚拟环境等新功能旨在进一步提高性能和开发人员体验。以下部分将深入探讨这些领域。

运行时升级

AWS Glue 6.0 全面升级核心运行时栈,为您的无服务器数据集成工作负载带来更新版本的 Apache Spark、Python、Scala 和 AWS SDK。

  • Apache Spark 4.1.1– AWS Glue 6.0 运行 AWS 优化的 Apache Spark 4.1.1 构建,这是从 AWS Glue 5.1 上的 Spark 3.5 的一次重大代际飞跃。此版本引入了专注于意图驱动数据工程、亚秒级延迟(无状态任务低至个位数毫秒)的实时流式处理、更快的 PySpark 性能以及扩展的 SQL 功能的改进。
  • Python 3.13– 支持 Python 3.13,这是一个稳定版本,带来了解释器更改、Python 数据模型增强、标准库更新和安全更新。
  • Scala 2.13– 升级到 Scala 2.13,其中包括集合库全面改革、语言和语法功能更改、标准库补充以及编译器性能更新。

降价

AWS Glue 6.0 将当前 AWS Glue 定价降低 30%。这意味着,与 AWS Glue 5.1 相比,您在 AWS Glue 6.0 上运行的每个作业每 DPU 小时成本降低 30%,无需更改工作负载配置。将此次降价与运行时升级带来的性能改进相结合,您的实际成本节省可以叠加,因为作业可以在更低价格点上完成得更快并消耗更少的 DPU 小时。如果您运行大规模提取、转换和加载 (ETL) 管道或定期批处理工作负载,这种叠加效应有助于减少您的月度支出。

为了量化比较,我们在 AWS Glue 上使用 30 个 G.2X worker,对存储在Amazon Simple Storage Service (Amazon S3)中的 Parquet 数据运行了 3 TB 规模的行业标准 TPC-DS 基准测试。下表比较了我们在测试中针对 AWS Glue 6.0 和 AWS Glue 5.1 获得的结果。因此,基于 3 TB 规模的 TPC-DS 基准测试,AWS Glue 6.0 比 AWS Glue 5.1 提供了高达 36% 的性价比提升。

.AWS Glue 6.0AWS Glue 5.1
估计成本(美元)5.61 美元8.87 美元

表 1:AWS Glue 6.0 和 AWS Glue 5.1 之间的 3TB TPC-DS 基准测试比较

更新的开放表格式 (OTF) 支持

AWS Glue 6.0 附带所有三种主要开放表格式的更新版本 – Iceberg 1.11.0、Hudi 1.1.1 和 Delta Lake 4.2.0 – 提供更好的性能、改进的合并读取功能、简化的并发控制和扩展的 SQL 兼容性。

除了支持最新的开放表格式版本外,AWS Glue 6.0 还提供了适合企业使用的 Apache Iceberg V3 规范。亮点是变体分片,AWS Glue 使用它自动将半结构化数据分解为物理优化的列式子字段,这应能加快查询读取性能。结合用于高效行级更新的删除向量、UNKNOWN 列类型、默认列值和更丰富的数据类型支持,AWS Glue 6.0 旨在使您的开放数据湖更快、更灵活、更具成本效益。AWS Glue 6.0 还增加了对地理空间数据类型(Geometry 和 Geography)以及 Apache Iceberg V3 规范中的纳秒精度时间戳的支持,这两者在开源 Apache Spark 4.1 中目前均不支持。行谱系跟踪等其他功能完善了 AWS Glue 6.0 上可用的 Apache Iceberg V3 功能。

在以下部分中,我们演示 AWS Glue 6.0 上 Apache Iceberg V3 规范的部分功能。

  1. VARIANT 列类型
Apache Iceberg V3 引入了 Variant 类型,以紧凑的二进制格式存储半结构化数据(例如 JSON、XML、日志和深度嵌套的事件数据)。Variant 碎片化设计旨在自动将 VARIANT 列分解为物理优化的列式子字段,促进谓词下推并减少扫描开销。它旨在提供对半结构化数据的更简单管理,无需复杂的扁平化逻辑。使用 Variant 类型,您可以在表列中灵活嵌入 JSON 数据类型,同时碎片化旨在加速读取查询并降低成本。
  1. UNKNOWN 列类型
Apache Iceberg V3 中的 UNKNOWN 类型充当灵活占位符,用于在创建表或数据导入时尚未确定数据类型的列。表可以最初接受全空数据,并且列类型可以在以后升级,而不会破坏导入管道或消费应用程序。这可以简化快速变化数据源的架构演进。Apache Iceberg V3 的 UNKNOWN 列类型映射到 Spark 4.1 的 VOID 类型。
  1. DEFAULT 列值
Apache Iceberg V3 的 DEFAULT 列值允许在表元数据中为列指定默认值。当您添加新列时,查询引擎旨在自动将此默认值应用于旧行,而无需重写数据或运行手动回填操作。

以下代码演示了创建一个使用 VARIANT 和 UNKNOWN 类型以及列 DEFAULT 值的 Apache Iceberg V3 表。

前提条件

要开始此代码示例,请确保您具备以下前提条件。

  1. 一个 AWS 账户。
  2. 一个 AWS Identity and Access Management (IAM) 角色,具有 AWS Glue、AWS Glue Data Catalog 和 Amazon S3 的权限。有关更多信息,请参阅 设置 AWS Glue 的 IAM 权限。这将是 AWS Glue 作业执行角色。
  3. 一个 S3 存储桶,用于存储 Iceberg 表数据。

步骤

要创建 AWS Glue 6.0 作业,请使用以下步骤。

  1. 登录您的 AWS 账户并打开 AWS Glue 控制台
  2. 在下拉菜单中选择引擎为 Spark
  3. 开始新鲜创建脚本并复制粘贴以下代码。
  4. 在代码中将演示 S3 存储桶名称替换为您的存储桶名称。
# Example pySpark script for testing few Iceberg v3's new data types
from pyspark.sql import SparkSession

CATALOG = "glue_catalog"
DATABASE = "sample_glue6_iceberg_db"
TABLE_NAME = "sample_glue6_table"
TABLE = f"{CATALOG}.{DATABASE}.{TABLE_NAME}"
TABLE_LOCATION = "s3://amzn-s3-demo-table-bucket/glue6blog-newdatatypes/"

# Configure Spark to use Apache Iceberg with the AWS Glue Data Catalog.
spark = (
    SparkSession.builder
    .appName("Glue6NewDataTypes")
    .config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions")
    .config(f"spark.sql.catalog.{CATALOG}", "org.apache.iceberg.spark.SparkCatalog")
    .config(f"spark.sql.catalog.{CATALOG}.catalog-impl", "org.apache.iceberg.aws.glue.GlueCatalog")
    .config(f"spark.sql.catalog.{CATALOG}.io-impl", "org.apache.iceberg.aws.s3.S3FileIO")
    .config(f"spark.sql.catalog.{CATALOG}.warehouse", "s3://amzn-s3-demo-table-bucket/glue6blog-newdatatypes")
    .config("spark.sql.defaultColumn.enabled", "true")
    .getOrCreate()
)

spark.sql(f"CREATE DATABASE IF NOT EXISTS {CATALOG}.{DATABASE}")

# Create an Iceberg v3 table with VARIANT, unknown, and a default value.
# Spark's VOID type is stored as the Iceberg v3 unknown type.
spark.sql(
    f"""
    CREATE TABLE {TABLE} (
        record_id BIGINT,
        payload VARIANT,
        reserved_field VOID,
        status STRING DEFAULT 'active'
    )
    USING ICEBERG
    LOCATION '{TABLE_LOCATION}'
    TBLPROPERTIES ('format-version' = '3')
    """
)

# Insert two rows. The omitted columns use null and the declared default.
spark.sql(
    f"""
    INSERT INTO {TABLE} (record_id, payload)
    VALUES
    (1, parse_json('{{"event_type":"created","score":98.5}}')),
    (2, parse_json('{{"event_type":"processed","score":87.2}}'))
    """
)

# Query the row and extract values from the VARIANT column.
spark.sql(
    f"""
    SELECT
        record_id,
        variant_get(payload, '$.event_type', 'string') AS event_type,
        variant_get(payload, '$.score', 'double') AS score,
        reserved_field,
        status
    FROM {TABLE}
    """
).show(truncate=False)

spark.stop()
AWS Glue Job details 选项卡,Glue 版本设置为 Glue 6.0,其他设置保持默认
Advanced properties 部分,显示 Job parameters 键 –datalake-formats 设置为值 iceberg
  1. 为作业指定 名称
  2. 您从前提条件(2)中获得的 IAM 角色,用于作业的 IAM 角色
  3. 选择 Glue 6.0作为 Glue 版本
  4. 其余保持默认。以下截图显示了 AWS Glue 控制台中的 Job details 选项卡,其中展示了值的示例。图 1:Job details 选项卡,Glue 版本设置为 Glue 6.0
  5. 向下滚动。在 Advanced properties下,对于 Job parameters,添加以下附加的作业参数键值对:--datalake-formats=iceberg以下截图显示了 AWS Glue 控制台中的 Job parameters 以及展示的键值对。图 2:Job parameters,datalake-formats 键设置为 iceberg

保存作业并选择 运行。作业成功完成后,从 运行 选项卡 – 运行详情,您可以检查 输出日志,它会带您进入 Amazon CloudWatch 控制台。以下显示了脚本中 SELECT 查询的示例输出。

+---------+----------+-----+--------------+------+
|record_id|event_type|score|reserved_field|status|
+---------+----------+-----+--------------+------+
|1        |created   |98.5 |NULL          |active|
|2        |processed |87.2 |NULL          |active|
+---------+----------+-----+--------------+------+

请注意,我们插入了两行,仅包含 record_id 和 variant 列的值。Variant 列插入是使用 parse_json() 完成的。reserved_field 是 VOID 类型,因此返回 NULL 值。status 列声明了默认值 active,并在插入操作中省略该列时返回 active

  1. 删除向量Apache Iceberg V3 用 删除向量 取代了 Apache Iceberg V2 中使用的传统位置删除文件。这一变化有助于提高 Merge-on-Read (MoR) 性能。这一转变将繁重的多文件 Parquet 读取替换为高度压缩的直接二进制位图,可以降低存储开销,并在删除繁重的表上实现更快的读取。在大量表更新的场景中,例如从操作数据库进行流式变更数据捕获 (CDC),Apache Iceberg V3 相比 Apache Iceberg V2 可以提供读取性能优势。为了验证删除向量的性能,我们创建了两个相同的 AWS Glue 流式作业,并将事件导入两个不同的 Iceberg 表,一个采用 Apache Iceberg V2,另一个采用 Apache Iceberg V3 格式。流式 CDC 事件大约每秒 150,000 个事件,merge-on-read,更新频繁。每个微批次都会写入行级删除。我们将两张表冻结在相同的删除繁重状态,并禁用压缩,使表在 2640 万物理行中大约有 170 万行处于有效状态。下表总结了两个 Iceberg 表的读取性能延迟。我们在测试中观察到,从删除繁重的 Apache Iceberg V3 读取至少比从类似的 Apache Iceberg V2 表读取快 1.5 倍。对于更大规模的企业级 Apache Iceberg V3 表,读取性能可能会进一步提高。
读取延迟比较,显示 Apache Iceberg V3 删除向量读取至少比 Apache Iceberg V2 删除文件快 1.5 倍

表 2 – Apache Iceberg V2 删除文件和 Apache Iceberg V3 删除向量之间的读取延迟比较

新的 ETL 功能

AWS Glue 6.0 引入了多项附加功能,旨在简化您构建和管理数据管道的方式,下面列出了其中的一些功能。

  • Spark 声明式管道 (SDP),您可以使用 SQL 语句或 Python 装饰器以声明方式定义整个数据管道的预期结果,而 AWS Glue 会自动处理执行流程、依赖解析、并行性、检查点、CDC 和恢复。这有助于您专注于业务逻辑,而不是编排细节。
  • 实时模式(RTM)用于流式处理,为Structured Streaming提供连续执行,延迟低于秒级,对于无状态任务可低至个位数毫秒。这有助于支持如欺诈检测、实时仪表板和事件驱动架构等实时用例,而无需管理专门的流式基础设施。
  • Arrow原生UDF/UDTF直接在PyArrow批次上执行Python函数,无需Pandas转换开销,这可以在大规模自定义转换逻辑时提高性能。
  • 递归公共表表达式(CTE)原生添加了WITH RECURSIVE查询,允许图遍历和分层查询,无需变通方法或外部库。
  • Python数据源过滤器下推会在数据源处评估过滤器,旨在减少数据移动,减少扫描的数据量,并提高作业性能。
  • 使用Python虚拟环境和S3缓存,您可以提供预构建的Python依赖项,这应通过消除运行时依赖解析来减少AWS Glue作业的启动延迟。对于使用--additional-python-modules的现有作业,无需任何操作。当您的作业在AWS Glue 6.0上运行时,AWS Glue会自动处理转换为虚拟环境的过程。

依赖库升级

下表总结了AWS Glue 6.0上的关键运行时和库版本升级。

功能Glue 6.0Glue 5.1
Spark4.1.1-amzn-03.5.6-amzn-1
Python3.13.143.11.15
Scala2.13.172.12.18
AWS SDK for Java2.44.6(版本1.x已移除)2.35.5
Boto31.42.841.40.61
Java17.0.2017.0.19
Iceberg1.11.01.10.0
Hudi1.1.1.0.2
Delta Lake4.2.03.3.2
AWS Glue Data Catalog客户端4.11.04.9.0
EMR DynamoDB连接器6.1.05.7.0
Arrow18.3.02.0.1
Hive2.3.10-amzn-12.3.9-amzn-4

表3:AWS Glue 6.0和AWS Glue 5.1的运行时和库版本比较

入门

要开始使用AWS Glue 6.0,您可以使用以下方法之一。

清理

为避免产生费用,请清理您为本文创建的资源。

  1. 删除Data Catalog数据库和Iceberg表。
  2. 从您的S3存储桶中删除Iceberg表的数据和元数据文件夹。
  3. 删除AWS Glue作业和AWS Glue作业执行IAM角色。

结论

AWS Glue 6.0旨在更快、更具成本效益且更易于使用,用于构建您的开放数据湖仓架构和编排您的数据管道。在本文中,我们讨论了AWS Glue 6.0的主要亮点,并用代码示例说明了Apache Iceberg V3特性的使用。您可以在AWS Glue 6.0上创建新的AWS Glue作业,或迁移您现有的AWS Glue作业以从这些改进中受益。

借助Apache Spark 4.1.1、Apache Iceberg V3、Python 3.13、升级的开源表格式库以及新的流式处理能力,AWS Glue 6.0旨在帮助您更高效地构建新的数据应用或更高效地运营现有数据管道,并减少维护开销。

我们鼓励您今天就在开发环境中测试AWS Glue 6.0。查看这篇关于将您的AWS Glue作业升级到AWS Glue 6.0的博客。此外,在接下来的几天和几周内,请关注有关AWS Glue 6.0上Spark 4.1.1和Apache Iceberg V3各种特性的专题博客。

致谢:我们感谢众多工程师和领导者,他们帮助构建AWS Glue 6.0,以支持客户获得高性能的Spark运行时和其他增值功能。

这篇内容对你有用吗?

反馈只用于改善内容筛选,不等同于收藏

分享这条资讯
分享海报
保存图片
iOS 也可以长按图片保存