Spark ジョブの AWS Glue の 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 データ型とバリアントシュレッディングにより、半構造化データ管理が簡素化され、読み取りが高速化されます。
ナノ秒精度タイムスタンプ。
Geospatial データ型 (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) — ランタイムに AWS Glue が Spark ドライバーとエグゼキューターにアタッチする独自の Python venv を構築して提供し、依存関係管理を完全に制御できます。既存のジョブが 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)。Athena とのクロスエンジン互換性のために Iceberg v2 を使用してください。 -
Python 3.13 では、非推奨のモジュールをいくつか削除し、一部の標準ライブラリ関数の動作を変更します。互換性については、Python 3.13 移行ガイドを参照してください。
-
AWS SDK for Java 2.x の
--user-jars-firstとの互換性 — AWS Glue 6.0 には AWS SDK for Java 2.x バージョン 2.44.6 が含まれています。AWS SDK for Java 2.x の古いバージョンをバンドルするカスタム JAR で--user-jars-firstジョブパラメータを使用すると、ジョブが失敗し、java.lang.NoSuchFieldErrorまたは同様のエラーが発生する可能性があります。これらの障害は、カスタム JAR にバンドルされている SDK に、AWS Glue ランタイムが依存するクラス、フィールド、またはメソッドがない場合に発生します。この問題を回避するには、--user-jars-firstで提供するカスタム JAR で AWS SDK for Java 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.*など) を設定した場合は、それらを削除してください。 -
AWS SDK for Java 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 Migration Guide
」を参照してください。
-
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 の生成 AI アップグレードを使用して、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 互換性のためにコードを更新します。廃止されたモジュール (
imp、cgi、cgitbなど) の使用を削除します。 -
[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 コネクタになりました。
-
[依存関係] Scala 2.13 および Spark 4.1 用にコンパイルされたバージョンに
--extra-jarsを更新します。
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は、NoSuchMethodErrorまたはClassNotFoundExceptionで失敗します。すべてのカスタム 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 の移行ドキュメントを参照してください。
-
Migration Guide: Spark Core
(Apache Spark ウェブサイト) -
Migration Guide: SQL, Datasets and DataFrame
(Apache Spark ウェブサイト) -
Migration Guide: Structured Streaming
(Apache Spark ウェブサイト) -
Upgrading PySpark
(Apache Spark ウェブサイト)
古い AWS Glue バージョンから AWS Glue 6.0 への移行
-
AWS Glue 5.0 から AWS Glue 5.1 に関連する移行ステップについては、「AWS Glue 5.0 から AWS Glue 5.1 への移行」を参照してください。
-
AWS Glue 4.0 から AWS Glue 5.0 に関連する移行ステップについては、「AWS Glue 4.0 から AWS Glue 5.0 への移行」を参照してください。
-
AWS Glue 3.0 から AWS Glue 5.0 に関連する移行ステップについては、「AWS Glue 3.0 から AWS Glue 5.0 への移行」を参照してください。
-
AWS Glue 2.0 から AWS Glue 5.0 に関連する移行ステップについては、「AWS Glue 2.0 から AWS Glue 5.0 への移行」を参照してください。
-
上記のステップを完了したら、「AWS Glue 5.1 から AWS Glue 6.0 への移行」に従って AWS Glue 6.0 への移行を完了します。
AWS Glue 6.0 向けのコネクタと JDBC ドライバーの移行
アップグレードされた JDBC コネクタとデータレイクコネクタのバージョンについては、次を参照してください。
AWS Glue 6.0 の 付録 D: オープンテーブル形式のアップグレード で特定された OTF バージョンアップグレードには、次の変更が適用されます。
Apache Iceberg
次の変更があります。
Iceberg が 1.11.0 にアップグレードされ、Apache Iceberg バージョン 3 仕様を完全にサポートするようになりました。
半構造化データクエリを最適化するためのバリアントシュレッディングを備えた VARIANT データ型。
ナノ秒精度タイムスタンプ。
Geospatial データ型 (Geometry と Geography)
AWS Glue ETL では AWS Glue 5.1 以降、削除ベクトル (Puffin ファイルに保存されている Roaring Bitmaps を使用した merge-on-read) と first-row-id メタデータによる行の系統追跡という Iceberg 機能が既にサポートされています。
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 の Visual ETL は、新しい Iceberg v3 データ型をサポートしていません。Visual ETL でこれらの新機能を使用する場合は、ETL ジョブを Amazon SageMaker Unified Studio に移行することをお勧めします。
-
きめ細かなアクセスコントロール (FGAC) は、VARIANT 列ではサポートされていません。
-
'format-version'='3'で作成された Iceberg テーブルは、Athena SQL では読み取れません (エラー:Cannot read unsupported version 3)。Athena とのクロスエンジン互換性のために Iceberg v2 を使用してください。
付録 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 Database | 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: コネクタのアップグレード
コネクタのアップグレードは次のとおりです。
| コネクタ | 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 |