

# リリースバージョン
<a name="notebooks-spark-release-versions"></a>

Amazon Athena for Apache Spark には、次のリリースバージョンがあります。

## PySpark エンジンバージョン 3
<a name="notebooks-spark-release-versions-pyspark-3"></a>

PySpark バージョン 3 には Apache Spark バージョン 3.2.1 が含まれています。このバージョンでは、Athena コンソール内ノートブックで Spark コードを実行できます。

## Apache Spark バージョン 3.5
<a name="notebooks-spark-release-versions-spark-35"></a>

Apache Spark バージョン 3.5 は Amazon EMR 7.12 に基づいており、Apache Spark バージョン 3.5.6 をパッケージ化しています。このバージョンでは、Amazon SageMaker AI Unified Studio ノートブックまたは互換性のある Spark クライアントから Spark コードを実行できます。このバージョンには、インタラクティブワークロードのエクスペリエンスを向上させるための主要機能が追加されています。
+ **Spark Connect を固定** – 認証と承認を受けた AWS エンドポイントとして Spark Connect を追加します。
+ **セッションレベル原価配分** – ユーザーは、AWSCost Explorer またはコストと使用状況レポートでインタラクティブセッションあたりのコストを追跡できます。詳細については、「[セッションレベル原価配分](notebooks-spark-cost-attribution.md)」を参照してください。
+ **高度なデバッグ機能** – API とノートブックの両方からワークロードをデバッグするために Spark UI と Spark History Server のライブサポートを追加します。詳細については、「[Spark UI へのアクセス](notebooks-spark-ui-access.md#notebooks-spark-ui-access-methods)」を参照してください。
+ ** フィルタリングされていないアクセスのサポート** – 保護された AWS Glue データカタログテーブルのうち、完全なテーブルアクセス許可を取得しているものにアクセスします。詳細については、「[Lake Formation と Athena Spark ワークグループの併用](notebooks-spark-lakeformation.md)」を参照してください。

### Spark のデフォルトプロパティ
<a name="notebooks-spark-release-versions-spark-35-default-properties"></a>

次の表に、Athena SparkConnect セッションに適用される Spark プロパティとそのデフォルト値を示します。


| Key | デフォルトの値 | 説明 | 
| --- | --- | --- | 
|  `spark.app.id`  |  `<Athena SessionId>`  |  これは変更できません。  | 
|  `spark.app.name`  |  `default`  |    | 
|  `spark.driver.cores`  |  `4`  |  ドライバーが使用するコアの数。これは初回起動時に変更できません。  | 
|  `spark.driver.memory`  |  `10g`  |  ドライバーが使用するメモリの量。これは初回起動時に変更できません。  | 
|  `spark.driver.memoryOverhead`  |  `6g`  |  ドライバーで実行されている Python ワークロードやその他のプロセスに割り当てられたメモリオーバーヘッドの量。これは初回起動時に変更できません。  | 
|  `spark.cortex.driver.disk`  |  `64g`  |  Spark ドライバーディスク。これは初回起動時に変更できません。  | 
|  `spark.executor.cores`  |  `4`  |  各エグゼキュターが使用するコアの数。これは初回起動時に変更できません。  | 
|  `spark.executor.memory`  |  `10g`  |  ドライバーが使用するメモリの量。  | 
|  `spark.executor.memoryOverhead`  |  `6g`  |  エグゼキュターで実行されている Python ワークロードやその他のプロセスに割り当てられたメモリオーバーヘッドの量。これは初回起動時に変更できません。  | 
|  `spark.cortex.executor.disk`  |  `64g`  |  Spark エグゼキュターディスク。これは初回起動時に変更できません。  | 
|  `spark.cortex.executor.architecture`  |  `AARCH_64`  |  エグゼキュターのアーキテクチャ。  | 
|  `spark.driver.extraJavaOptions`  |  `-Djava.net.preferIPv6Addresses=false -XX:+IgnoreUnrecognizedVMOptions --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.base/jdk.internal.ref=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/sun.nio.cs=ALL-UNNAMED --add-opens=java.base/sun.security.action=ALL-UNNAMED --add-opens=java.base/sun.util.calendar=ALL-UNNAMED --add-opens=java.security.jgss/sun.security.krb5=ALL-UNNAMED -Djdk.reflect.useDirectMethodHandle=false`  |  Spark ドライバーの追加 Java オプション。これは初回起動時に変更できません。  | 
|  `spark.executor.extraJavaOptions`  |  `-Djava.net.preferIPv6Addresses=false -XX:+IgnoreUnrecognizedVMOptions --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.base/jdk.internal.ref=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/sun.nio.cs=ALL-UNNAMED --add-opens=java.base/sun.security.action=ALL-UNNAMED --add-opens=java.base/sun.util.calendar=ALL-UNNAMED --add-opens=java.security.jgss/sun.security.krb5=ALL-UNNAMED -Djdk.reflect.useDirectMethodHandle=false`  |  Spark エグゼキューターの追加 Java オプション。これは初回起動時に変更できません。  | 
|  `spark.executor.instances`  |  `1`  |  割り当てる Spark エグゼキュターコンテナの数。  | 
|  `spark.dynamicAllocation.enabled`  |  `TRUE`  |  動的リソース割り当てを有効にするオプション。このオプションは、ワークロードに基づいて、アプリケーションに登録されたエグゼキュターの数をスケールアップまたはスケールダウンします。  | 
|  `spark.dynamicAllocation.minExecutors`  |  `0`  |  動的割り当てを有効にした場合のエグゼキュター数の下限。  | 
|  `spark.dynamicAllocation.maxExecutors`  |  `59`  |  動的割り当てを有効にした場合のエグゼキュター数の上限。  | 
|  `spark.dynamicAllocation.initialExecutors`  |  `1`  |  動的割り当てを有効にした場合に実行するエグゼキュターの初期数。  | 
|  `spark.dynamicAllocation.executorIdleTimeout`  |  `60s`  |  Spark がエグゼキュターを削除するまで、エグゼキュターがアイドル状態を維持できる時間の長さ。これは、動的割り当てを有効にした場合にのみ適用されます。  | 
|  `spark.dynamicAllocation.shuffleTracking.enabled`  |  `TRUE`  |  DRA を有効にするには、シャッフル追跡を有効にする必要があります。  | 
|  `spark.dynamicAllocation.sustainedSchedulerBacklogTimeout`  |  `1s`  |  タイムアウトでは、Spark スケジューラが、クラスターマネージャーに対する新規エグゼキュター起動リクエストをトリガーする前に、保留タスクの持続的なバックログを観測する時間を定義します。  | 
|  `spark.sql.catalogImplementation`  |  `hive`  |    | 
|  `spark.hadoop.hive.metastore.client.factory.class`  |  `com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory`  |  AWS Glue メタストア実装クラス。  | 
|  `spark.hadoop.hive.metastore.glue.catalogid`  |  `<accountId>`  |  AWS Glue カタログアカウントID。  | 
|  `spark.sql.hive.metastore.sharedPrefixes`  |  `software.amazon.awssdk.services.dynamodb`  |  プロパティでは、Hive メタストアのクライアントコード用に作成された単独の ClassLoader ではなく、Application ClassLoader によってロードする必要があるクラス向けパッケージプレフィックスのカンマ区切りリストを指定します。  | 
|  `spark.hadoop.fs.s3.impl`  |  `org.apache.hadoop.fs.s3a.S3AFileSystem`  |  S3A を使用する S3A クライアントの実装を定義します。  | 
|  `spark.hadoop.fs.s3a.impl`  |  `org.apache.hadoop.fs.s3a.S3AFileSystem`  |  S3A クライアント（S3A）の実装を定義します。  | 
|  `spark.hadoop.fs.s3n.impl`  |  `org.apache.hadoop.fs.s3a.S3AFileSystem`  |  S3A を使用するネイティブ S3 クライアント（S3N）の実装を定義します。  | 
|  `spark.hadoop.fs.AbstractFileSystem.s3.impl`  |  `org.apache.hadoop.fs.s3a.S3A`  |    | 
|  `spark.hadoop.fs.s3a.aws.credentials.provider`  |  `software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider`  |    | 
|  `spark.hadoop.fs.s3.customAWSCredentialsProvider`  |  `com.amazonaws.auth.DefaultAWSCredentialsProviderChain`  |    | 
|  `spark.hadoop.mapreduce.output.fs.optimized.committer.enabled`  |  `TRUE`  |  このプロパティにより、Amazon S3 にデータを書き込むときに Spark ジョブ用に最適化されたコミットプロトコルが有効になります。true に設定すると、Spark においてコストのかかるファイル名変更オペレーションが回避されるので、デフォルトの Hadoop コミッターよりも高速で信頼性の高いアトミック書き込みを実現できます。  | 
|  `spark.hadoop.fs.s3a.endpoint.region`  |  `<REGION>`  |  この設定では、S3A クライアントを介してアクセスされる Amazon S3 バケットの AWS リージョンを明示的に設定します。  | 
|  `spark.hadoop.fs.s3.getObject.initialSocketTimeoutMilliseconds`  |  `2000`  |  ここでは、ソケット接続のタイムアウトをミリ秒単位で指定します。  | 
|  `spark.hadoop.fs.s3a.committer.magic.enabled`  |  `TRUE`  |  これにより S3A「Magic」コミッターが有効になります。これはパフォーマンスは高いが特異性のあるコミットプロトコルで、特別なパスに対するクラスターマネージャーの基本サポートに依存します。  | 
|  `spark.hadoop.fs.s3a.committer.magic.track.commits.in.memory.enabled`  |  `TRUE`  |  これはMagic Committer が有効になっている場合にのみ関係するものであり、タスクによってコミットされたファイルのリストが仮のディスクファイルに書き込まれるのではなくメモリで追跡されるようにするかどうかを指定します。  | 
|  `spark.hadoop.fs.s3a.committer.name`  |  `magicv2`  |  この設定では、使用する特定の S3A 出力コミッターアルゴリズム（ディレクトリ、パーティション化、マジックなど）を明示的に選択します。名前を指定することで、一時データの管理、タスク失敗の処理、ターゲット Amazon S3 パスへの最終的なアトミックコミットの実行に関する戦略を選択します。  | 
|  `spark.hadoop.fs.s3.s3AccessGrants.enabled`  |  `FALSE`  |  プロパティを使用すると、S3A/EMRFS ファイルシステムクライアントを介して Amazon S3 データにアクセスするときに、Amazon S3 Access Grants のサポートが有効になります。  | 
|  `spark.hadoop.fs.s3.s3AccessGrants.fallbackToIAM`  |  `FALSE`  |  Amazon S3 Access Grants を有効にすると、このプロパティにより、Access Grants の検索が失敗した場合や十分なアクセス許可が得られない場合に Amazon S3 クライアントを従来の IAM 認証情報にフォールバックするかどうかが制御されます。  | 
|  `spark.pyspark.driver.python`  |  `/usr/bin/python3.11`  |  ドライバーの Python パス。  | 
|  `spark.pyspark.python`  |  `/usr/bin/python3.11`  |  エグゼキュターの Python パス。  | 
|  `spark.python.use.daemon`  |  `TRUE`  |  この設定では、Spark が各エグゼキュターで Python ワーカーデーモンプロセスを使用するかどうかを制御します。有効（デフォルトでは true）にすると、エグゼキュターがタスク間で Python ワーカーを存続させて、タスクごとに新しい Python インタープリタの起動と初期化を繰り返すオーバーヘッドを回避するため、PySpark アプリケーションのパフォーマンスが大幅に向上します。  | 
|  `spark.sql.execution.arrow.pyspark.enabled`  |  `TRUE`  |  Apache Arrow の使用が有効になり、PySpark の JVM プロセスと Python プロセス間のデータ転送を最適化します。  | 
|  `spark.sql.execution.arrow.pyspark.fallback.enabled`  |  `TRUE`  |  Apache Arrow 最適化を使用した JVM と Python 間のデータ転送中にエラーが発生した場合に Spark の動作を制御する設定プロパティ。  | 
|  `spark.sql.parquet.fs.optimized.committer.optimization-enabled`  |  `TRUE`  |  Parquet ファイルを特定のファイルシステム（特に Amazon S3 などのクラウドストレージシステム）に書き込むときに、最適化されたファイルコミッターを Spark に使用させるかどうかを制御する設定プロパティ。  | 
|  `spark.sql.parquet.output.committer.class`  |  `com.amazon.emr.committer.EmrOptimizedSparkSqlParquetOutputCommitter`  |  Parquet ファイルを書き込むときに使用する Hadoop OutputCommitter の完全修飾クラス名を指定する Spark 設定プロパティ。  | 
|  `spark.resourceManager.cleanupExpiredHost`  |  `TRUE`  |  このプロパティでは、削除されたノードまたは期限切れのノードで実行されていたエグゼキュターに関連付けられている Spark アプリケーションリソースをドライバーによってアクティブにクリーンアップさせるかどうかを制御します。  | 
|  `spark.blacklist.decommissioning.enabled`  |  `TRUE`  |  プロパティを使用すると、クラスターマネージャーにより現在廃止 (正常なシャットダウン) 処理が行われているエグゼキュターをSpark のロジックで自動的にブラックリストに登録できます。これにより、間もなく終了するエグゼキュターに対してスケジューラから新規タスクが送信されなくなるため、リソースのスケールダウン中にジョブの安定性が向上します。  | 
|  `spark.blacklist.decommissioning.timeout`  |  `1h`  |  ブラックリストへのホストの登録前に、タスクが廃止エグゼキュターから正常に移行されるまでの Spark の最長待機時間。  | 
|  `spark.stage.attempt.ignoreOnDecommissionFetchFailure`  |  `TRUE`  |  廃止エグゼキュターからシャッフルデータを読み取るときに取得に失敗した場合に、厳格にならずステージ全体の試行に失敗しないように Spark に指示を出します。その取得失敗は回復可能と見なされ、Spark は、別の場所からデータを再度取得し（場合によっては再計算が必要）、正常なシャットダウン中に厳密なエラー処理よりもジョブの完了を優先します。  | 
|  `spark.decommissioning.timeout.threshold`  |  `20`  |  このプロパティは通常、内部的または特定のクラスターマネージャー設定で使用され、Spark がホストの廃止プロセスにかかる合計の最長時間を定義します。実際の廃止時間がこのしきい値を超える場合、Spark はホストのブラックリスト登録や強制終了のリクエストなど、リソースを解放するための積極的なアクションを実行する可能性があります。  | 
|  `spark.files.fetchFailure.unRegisterOutputOnHost`  |  `TRUE`  |  タスクが特定のホストからシャッフルデータまたは RDD データを取得できない場合、これを true に設定すると、そのホストで障害が発生したアプリケーションに関連付けられているすべての出力ブロックの登録を解除するように Spark に指示します。これにより、将来のタスクで信頼性の低いホストからデータが取得されるのを防ぎ、Spark に必要なブロックを他の場所で再計算させることで、断続的なネットワーク問題に対するジョブの堅牢性を高めます。  | 