

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 發行版本
<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** – 將 Spark Connect 新增為已驗證和授權的 AWS 端點。
+ **工作階段層級成本歸因** – 使用者可以在 AWS Cost Explorer 或成本和用量報告中追蹤每個互動式工作階段的成本。如需詳細資訊，請參閱[工作階段層級成本歸因](notebooks-spark-cost-attribution.md)。
+ **進階偵錯功能** – 新增即時 Spark UI 和 Spark 歷史記錄伺服器支援，以偵錯來自 APIs和筆記本的工作負載。如需詳細資訊，請參閱[存取 Spark UI](notebooks-spark-ui-access.md#notebooks-spark-ui-access-methods)。
+ ** 未篩選的存取支援** – 存取您擁有完整資料表許可的受保護 AWS Glue 資料目錄資料表。如需詳細資訊，請參閱[搭配 Athena Spark 工作群組使用 Lake Formation](notebooks-spark-lakeformation.md)。

### Spark 預設屬性
<a name="notebooks-spark-release-versions-spark-35-default-properties"></a>

下表列出適用於 Athena SparkConnect 工作階段的 Spark 屬性及其預設值。


| 金錀 | 預設值 | Description | 
| --- | --- | --- | 
|  `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 目錄 accountId。  | 
|  `spark.sql.hive.metastore.sharedPrefixes`  |  `software.amazon.awssdk.services.dynamodb`  |  屬性會指定由 Application ClassLoader 而非為 Hive Metastore Client 程式碼建立的隔離 ClassLoader 所載入之類別的逗號分隔套件字首清單。  | 
|  `spark.hadoop.fs.s3.impl`  |  `org.apache.hadoop.fs.s3a.S3AFileSystem`  |  定義 S3 用戶端使用 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`  |  定義原生 S3 用戶端 (S3N) 使用 S3A 的實作。  | 
|  `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>`  |  此組態會明確設定透過 Amazon S3 S3A 儲存貯體 AWS 的區域。  | 
|  `spark.hadoop.fs.s3.getObject.initialSocketTimeoutMilliseconds`  |  `2000`  |  這會指定以毫秒為單位的通訊端連線逾時。  | 
|  `spark.hadoop.fs.s3a.committer.magic.enabled`  |  `TRUE`  |  這可啟用 S3A "Magic" Committer，這是一種高效能但特定的遞交通訊協定，依賴基礎叢集管理員對特殊路徑的支援。  | 
|  `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`  |  透過 Amazon S3A/EMRFS 檔案系統用戶端存取 Amazon S3 資料時， 屬性可支援 Amazon S3A 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`  |  控制 Spark 在將 Parquet 檔案寫入特定檔案系統時是否使用最佳化檔案遞交器的組態屬性，特別是 Amazon S3 等雲端儲存系統。  | 
|  `spark.sql.parquet.output.committer.class`  |  `com.amazon.emr.committer.EmrOptimizedSparkSqlParquetOutputCommitter`  |  Spark 組態屬性，指定寫入 Parquet 檔案時要使用之 Hadoop OutputCommitter 的完整類別名稱。  | 
|  `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 在其他位置重新計算必要的區塊，並提高任務健全性以解決間歇性網路問題。  | 