View a markdown version of this page

将 AWS Glue for Spark 作业迁移到 AWS Glue 版本 6.0 - AWS Glue

将 AWS Glue for Spark 作业迁移到 AWS Glue 版本 6.0

本主题介绍 AWS Glue 版本 5.1 和 6.0 之间的变化,以便您将 Spark 应用程序和 ETL 作业迁移到 AWS Glue 6.0。还介绍了 AWS Glue 6.0 中的功能以及使用它的优点。

要将此功能与 AWS Glue ETL 任务结合使用,请在创建任务时为 Glue version 选择 6.0

新功能

此部分介绍 AWS Glue 版本 6.0 的新功能和优势。

  • Apache Spark 从 AWS Glue 5.1 中的 3.5.6 升级到 AWS Glue 6.0 中的 4.1.1。

  • Scala 从 2.12.18 升级到 2.13.17。

  • Python 从 3.11 升级到 3.13。

  • 开放表格式(OTF)已更新至 Hudi 1.1.1、Iceberg 1.11.0 和 Delta Lake 4.2.0。

  • Iceberg 格式版本 3:扩展数据类型和现有元数据结构,以添加新功能,包括:

    • 支持变体分解的 VARIANT 数据类型,可简化半结构化数据管理并加快读取速度。

    • 纳秒精度时间戳。

    • 地理空间数据类型(Geometry 和 Geography)。

  • Spark 声明式管道(SDP):一种新的声明式框架,用于通过 SQL 或 DataFrame API 定义端到端数据管道,支持流式传输表和实体化视图。有关更多信息,请参阅 Spark 声明式管道

  • 用于交互式会话的 Spark Connect:通过 Spark Connect 协议实现与 AWS Glue 交互式会话的瘦客户端连接,支持远程开发工作流。

  • Arrow 原生 Python UDF/UDTF:通过原生使用 Apache Arrow 列式格式提升 Python 用户自定义函数的性能。

  • 客户自主管理或服务生成的 Python 虚拟环境--python-virtual-env):您可以构建并提供自己的 Python venv,AWS Glue 在运行时将其附加到 Spark 驱动程序和执行程序上,从而提供对依赖项管理的完全控制。将现有作业迁移到 AWS Glue 6.0 后,AWS Glue 会在需要时自动生成此虚拟环境。

  • 流式传输增强:实时模式,用于具有毫秒级延迟的无状态流式传输。有关更多信息,请参阅 为流式传输作业启用实时模式

  • 连接器升级:更新了 Amazon Redshift、MongoDB、Snowflake 和其他连接器。有关完整版本的详细信息,请参阅 附录 C:连接器升级

已知问题和限制

请注意以下已知问题和限制:

  • 在 Spark 4.1 中,ANSI 模式默认处于启用状态。以往发生溢出时返回 NULL 的操作(例如,整数算术、强制转换运算)现在会抛出异常。设置 spark.sql.ansi.enabled=false 可恢复以前的行为。

  • Spark 声明式管道(SDP)是一项新功能,对某些 SQL 结构的支持有限。有关当前限制,请参阅 Spark 声明式管道 文档。

  • Athena SQL 无法读取在 AWS Glue 6.0 中创建的 Iceberg v3 表(错误:Cannot read unsupported version 3)。使用 Iceberg v2 实现与 Athena 的跨引擎兼容。

  • Python 3.13 移除了几个已弃用的模块,并更改了某些标准库函数的行为。请查看 Python 3.13 迁移指南以了解兼容性。

  • 适用于 Java 的 AWS SDK 2.x 与 --user-jars-first 的兼容性:AWS Glue 6.0 包含适用于 Java 的 AWS SDK 2.x 版本 2.44.6。如果您将 --user-jars-first 作业参数与捆绑了旧版本适用于 Java 的 AWS SDK 2.x 的自定义 JAR 一起使用,则您的作业可能会因 java.lang.NoSuchFieldError 或类似错误而失败。当您的自定义 JAR 中捆绑的 SDK 缺少 AWS Glue 运行时所依赖的类、字段或方法时,将会发生这些故障。为避免出现此问题,请确保您通过 --user-jars-first 提供的任何自定义 JAR 均使用适用于 Java 的 AWS SDK 2.x 版本 2.44.6 或更高版本。

重大更改

请注意以下重大更改:

  • EMRFS 已被移除。S3A 是 AWS Glue 6.0 中唯一的 S3 文件系统。com.amazon.ws.emr.hadoop.fs.EmrFileSystem 类不再可用。使用 s3:// 路径的作业会自动使用 S3A。如果您之前设置了特定于 EMRFS 的配置(例如 fs.s3.consistent.*),请将其移除。

  • 适用于 Java 的 AWS SDK v1 已被移除。仅 AWS SDK v2(2.44.6)可用。导入 com.amazonaws.services.* 软件包的作业必须迁移到 software.amazon.awssdk.services.*

  • Scala 已从 2.12 升级到 2.13。针对 Scala 2.12 编译的自定义 JAR 将无法正常工作。请针对 Scala 2.13.17 重新编译。主要变更:JavaConversions 已移除(请使用 CollectionConverters)、MutableList 已移除(请使用 ListBuffer),并行集合需要单独导入。

  • Spark 4.1 API 变更:

    • SQLContext 已移除:请直接使用 SparkSession

    • 默认情况下启用 ANSI 模式:隐式类型转换和溢出的行为将有所不同。

    • 移除了几个已弃用的 API。请参阅 Apache Spark 网站上的 Spark 4.1 迁移指南

  • CreateSession API 验证:对交互式会话的会话参数进行额外验证。从前以静默方式接受的无效配置现在可能会返回错误。

  • getResolvedOptions 行为更改:默认情况下,参数前缀匹配处于禁用状态(allow_abbrev=False)。请使用完整的参数名称,或将 allow_abbrev=True 传递给 getResolvedOptions() 以恢复旧行为。

用于迁移到 AWS Glue 6.0 的操作

对于现有任务,请将 Glue version 从以前的版本更改为任务配置中的 Glue 6.0

  • 在 AWS Glue Studio 中,为 Glue version 选择 Glue 6.0 - Supports Spark 4.1.1, Scala 2, Python 3

  • 在 API 中,在 UpdateJob API 操作的 GlueVersion 参数中选择 6.0

对于新任务,请在创建任务时选择 Glue 6.0

  • 在控制台中,为 Glue version 选择 Spark 4.1.1, Python 3 (Glue Version 6.0) or Spark 4.1.1, Scala 2 (Glue Version 6.0)

  • 在 AWS Glue Studio 中,为 Glue version 选择 Glue 6.0 - Supports Spark 4.1.1, Scala 2, Python 3

  • 在 API 中,在 CreateJob API 操作的 GlueVersion 参数中选择 6.0

为了帮助迁移作业,您可以使用适用于 Apache Spark 的生成式人工智能升级,将您的 AWS Glue ETL 作业从旧版 AWS Glue(2.0 及更高版本)升级到最新的 AWS Glue 版本。

问题排查

您可以使用 Spark 故障排除代理对 AWS Glue ETL 作业进行故障排除。

迁移核对清单

查看此核对清单以进行迁移:

  • [Scala] 针对 Scala 2.13.17 重新编译自定义 JAR。将 JavaConversions替换为 CollectionConverters

  • [Python] 更新代码以兼容 Python 3.13。移除已弃用模块的使用(例如,impcgicgitb)。

  • [Python] 将 boto3 引用从 1.40 更新到 1.42。

  • [Spark SQL] 查看查询以了解 ANSI 模式的影响。必要时,请添加 spark.sql.ansi.enabled=false

  • [SDK] 将所有 AWS SDK v1 导入(com.amazonaws.*)替换为 SDK v2(software.amazon.awssdk.*)。

  • [S3] 移除特定于 EMRFS 的配置。S3A 现在是默认且唯一的 S3 连接器。

  • [依赖关系] 将 --extra-jars 更新为针对 Scala 2.13 和 Spark 4.1 编译的版本。

从 AWS Glue 5.1 迁移到 AWS Glue 6.0

所有现有任务参数和 AWS Glue 5.1 中存在的主要功能将存在于 AWS Glue 6.0。迁移时,请注意以下更改:

  • S3 文件系统:EMRFS 已不再可用。S3A 是唯一的 S3 连接器。如果您之前设置过 spark.hadoop.fs.s3a.endpoint.region,请继续使用。如果未设置,请确保您的 VPC 端点或网络配置允许 S3A 解析正确的区域。

  • Scala 二进制兼容性:AWS Glue 6.0 使用 Scala 2.13。任何使用 Scala 2.12 编译的 --extra-jars 都会失败,并显示 NoSuchMethodErrorClassNotFoundException。重新编译所有自定义 Scala/Java JAR。

  • Spark SQL 行为变更:

    • 默认情况下,ANSI 模式处于开启状态。整数溢出、无效的强制转换和数组索引越界会引发异常,而不是返回 NULL。

    • spark.sql.legacy.timeParserPolicy 默认值已更改。日期/时间解析的行为可能会有所不同。

    • SQL 中的隐式字符串到数字的转换在 ANSI 模式下可能会失败。

  • Python 版本:Python 3.13 为运行时环境。--additional-python-modules 功能可以继续工作,但已被弃用。考虑迁移到 --python-virtual-env,以实现完全的依赖项控制。

  • AWS SDK:仅提供 SDK v2。如果您的脚本使用 boto3(Python),则无需进行任何更改——boto3 可以继续使用。对于直接使用 AWS SDK 的 Scala/Java 作业,请迁移到 v2 API。

请参阅 Spark 迁移文档:

从旧的 AWS Glue 版本迁移到 AWS Glue 6.0

AWS Glue 6.0 版的连接器和 JDBC 驱动程序迁移

有关已升级的 JDBC 和数据湖连接器的版本,请参阅:

以下更改适用于 附录 D:开放表格式升级 中列出的针对 AWS Glue 6.0的 OTF 版本升级。

Apache Iceberg

注意以下更改:

  • Iceberg 已升级到 1.11.0,全面支持 Apache Iceberg 第 3 版规范。

  • 带有变体分解功能的 VARIANT 数据类型,可优化半结构化数据查询。

  • 纳秒精度时间戳。

  • 地理空间数据类型(Geometry 和 Geography)。

自 AWS Glue 5.1 起,AWS Glue ETL 已支持以下 Iceberg 功能:删除向量(使用存储在 Puffin 文件中的 Roaring Bitmap 进行读取时合并)以及通过 first-row-id 元数据进行行谱系跟踪。

Apache Hudi

注意以下更改:

  • Hudi 已升级到 1.1.1。

  • 继续支持对 AWS Lake Formation 注册表的 FTA 读写访问。

Delta Lake

注意以下更改:

  • Delta Lake 已升级到 4.2.0。

  • 继续支持对 AWS Lake Formation 注册表的 FTA 读写访问。

已知限制条件

以下限制适用于 AWS Glue 6.0:

  • 不支持 Iceberg 原生表加密密钥。

  • 不支持 Iceberg 多参数转换。

  • 新的 Iceberg v3 数据类型仅支持 Spark DataFrames。这些功能不适用于 DynamicFrames。

  • AWS Glue Studio 中的可视化 ETL 不支持新的 Iceberg v3 数据类型。如果您希望在可视化 ETL 中使用这些新功能,建议将 ETL 作业迁移到 Amazon SageMaker 融通式合作开发工作室。

  • VARIANT 列不支持精细访问控制(FGAC)。

  • Athena SQL 无法读取使用 'format-version'='3' 创建的 Iceberg 表(错误:Cannot read unsupported version 3)。使用 Iceberg v2 实现与 Athena 的跨引擎兼容。

附录 A:显著依赖项升级

以下是依赖项升级:

依赖关系 AWS Glue 6.0 中的版本 AWS Glue 5.1 中的版本 AWS Glue 5.0 中的版本 AWS Glue 4.0 中的版本
Java 17 17 17 8
Spark 4.1.1 3.5.6 3.5.4 3.3.0-amzn-1
Hadoop 3.4.2 3.4.1 3.4.1 3.3.3-amzn-0
Scala 2.13.17 2.12.18 2.12.18 2.12
Jackson 2.20.0 2.15.2 2.15.2 2.12
Hive 2.3.10-amzn-1 2.3.9-amzn-4 2.3.9-amzn-4 2.3.9-amzn-2
Arrow 18.3.0 12.0.1 12.0.1 7.0.0
AWS Glue 数据目录客户端 4.11.0 4.9.0 4.5.0 3.7.0
AWS SDK for Java 2.44.6(仅限 v2) 2.35.5 2.29.52 1.12
Python 3.13 3.11 3.11 3.10
Boto3 1.42.84 1.40.61 1.34.131 1.26
Json4s 3.7.0-M11 3.7.0-M11 3.7.0-M11 3.7.0-M11
EMR DynamoDB 连接器 6.1.0 5.7.0 5.6.0 4.16.0
Netty 4.2.7 不适用 不适用 不适用
Parquet 1.16.0 不适用 不适用 不适用
NumPy 2.4.4 不适用 不适用 不适用
Pandas 2.3.3 不适用 不适用 不适用

附录 B:JDBC 驱动程序升级

以下是 JDBC 驱动程序升级:

驱动程序 AWS Glue 6.0 中的 JDBC 驱动程序版本 AWS Glue 5.1 中的 JDBC 驱动程序版本 AWS Glue 5.0 中的 JDBC 驱动程序版本
MySQL 8.0.33 8.0.33 8.0.33
Microsoft SQL Server 10.2.0 10.2.0 10.2.0
Oracle 数据库 23.4.0.24.05 23.3.0.23.09 23.3.0.23.09
PostgreSQL 42.7.3 42.7.3 42.7.3
Amazon Redshift

redshift-jdbc42-2.2.7

redshift-jdbc42-2.1.0.29

redshift-jdbc42-2.1.0.29

MariaDB 3.5.7 不适用 不适用

附录 C:连接器升级

以下是连接器升级:

Connector AWS Glue 6.0 中的版本 AWS Glue 5.1 中的版本 AWS Glue 5.0 中的版本
Spark Redshift 6.7.0 6.4.2 6.4.0
Spark SQL Kinesis 2.1.0 不适用 不适用
MongoDB 11.0.1 10.3.0 10.3.0
Snowflake 3.17.0 3.1.1 3.0.0
OpenSearch 2.0.0 1.2.0 1.2.0
EMR DynamoDB 连接器 6.1.0 5.7.0 5.6.0

附录 D:开放表格式升级

下面是开放表格式升级:

OTF AWS Glue 6.0 中的版本 AWS Glue 5.1 中的版本 AWS Glue 5.0 中的版本 AWS Glue 4.0 中的版本
Hudi 1.1.1 1.0.2 0.15.0 0.12.1
Delta Lake 4.2.0 3.3.2 3.3.0 2.1.0
Iceberg 1.11.0 1.10.0 1.7.1 1.0.0