

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

# 使用 Spark 屬性指定自訂組態
<a name="notebooks-spark-custom-jar-cfg"></a>

當您在 Amazon Athena for Apache Spark 中建立或編輯工作階段時，您可以使用 [Spark 屬性](https://spark.apache.org/docs/latest/configuration.html#spark-properties)來指定工作階段的 `.jar` 檔案、套件或其他自訂組態。若要指定 Spark 屬性，您可以使用 Athena 主控台 AWS CLI、 或 Athena API。

## 使用 Athena 主控台指定 Spark 屬性
<a name="notebooks-spark-custom-jar-cfg-console"></a>

在 Athena 主控台中，您可以在[建立筆記本](notebooks-spark-getting-started.md#notebooks-spark-getting-started-creating-your-own-notebook)或[編輯目前工作階段](notebooks-spark-getting-started.md#notebooks-spark-getting-started-editing-session-details)時指定 Spark 屬性。

**若要在**建立記事本**或**編輯工作階段詳細資訊**對話方塊中新增屬性**

1. 展開 **Spark 屬性**。

1. 若要新增屬性，請使用**在資料表中編輯**或**在 JSON 中編輯**選項。
   + 對於**在資料表中編輯**選項，請選擇**新增屬性**以新增屬性，或選擇**移除**以移除屬性。使用**關鍵字**和**值**方塊，以輸入屬性名稱及其值。
     + 若要新增自訂 `.jar` 檔案，請使用 `spark.jars` 屬性。
     + 若要指定套件檔案，請使用 `spark.jars.packages` 屬性。
   + 若要直接輸入和編輯您的設定，請選擇**在 JSON 中編輯**選項。在 JSON 文字編輯器中，您可以執行以下任務：
     + 選擇**複製**，以將 JSON 文字複製到剪貼簿。
     + 選擇**清除**，以從 JSON 編輯器中移除所有文字。
     + 選擇設定 (齒輪) 圖示，以設定換行或選擇 JSON 編輯器的顏色主題。

### 備註
<a name="notebooks-spark-custom-jar-cfg-notes"></a>
+ 您可以在 Athena for Spark 中設定屬性，這與直接在 [SparkConf](https://spark.apache.org/docs/latest/api/python/reference/api/pyspark.SparkConf.html) 物件上設定 [Spark 屬性](https://spark.apache.org/docs/latest/configuration.html#spark-properties)。
+ 所有 Spark 屬性均以 `spark.` 字首開頭。帶有其他字首的屬性會被忽略。
+ 並非所有 Spark 屬性都適用於 Athena 的自訂組態。如果您提交的 `StartSession` 請求具有限制組態，工作階段將無法啟動。
  + 您無法使用 `spark.athena.` 字首，因為其已保留。

## 使用 AWS CLI 或 Athena API 提供自訂組態
<a name="notebooks-spark-custom-jar-cfg-cli-or-api"></a>

若要使用 AWS CLI 或 Athena API 來提供工作階段組態，請使用 [StartSession](https://docs.aws.amazon.com/athena/latest/APIReference/API_StartSession.html) API 動作或 [start-session](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/athena/start-session.html) CLI 命令。在您的 `StartSession` 請求中，使用 [EngineConfiguration](https://docs.aws.amazon.com/athena/latest/APIReference/API_EngineConfiguration.html) 物件的 `SparkProperties` 欄位，以 JSON 格式傳遞您的組態資訊。這樣，將會使用您指定的組態啟動工作階段。

若要從 指定自訂 Spark 屬性 AWS CLI，請在啟動互動式工作階段時使用 `engine-configuration` 組態。

```
aws athena start-session \ 
--region "REGION"
--work-group "WORKGROUP" \
--engine-configuration '{
    "Classifications": [{
      "Name": "spark-defaults",
      "Properties": {
        "spark.dynamicAllocation.minExecutors": "1",
        "spark.dynamicAllocation.initialExecutors": "2",
        "spark.dynamicAllocation.maxExecutors": "10",
        "spark.dynamicAllocation.executorIdleTimeout": "300"
      }
    }]
  }'
```

您也可以使用 `CreateWorkgroup` API 動作或 `UpdateWorkgroup` API 動作，在工作群組層級指定組態預設值。在工作群組中定義的組態預設值會套用至該工作群組啟動的所有工作階段。

若要從工作群組 AWS CLI 的 指定預設 Spark 屬性，請在建立新的工作群組時使用 `engine-configuration`組態：

```
aws athena create-work-group \
  --region "REGION" \
  --name "WORKGROUP_NAME" \
  --configuration '{
    "EngineVersion": {
      "SelectedEngineVersion": "Apache Spark version 3.5"
    },
    "ExecutionRole": "EXECUTION_ROLE",
    "EngineConfiguration": {
      "Classifications": [
        {
          "Name": "spark-defaults",
          "Properties": {
            "spark.dynamicAllocation.minExecutors": "1",
            "spark.dynamicAllocation.initialExecutors": "2",
            "spark.dynamicAllocation.maxExecutors": "10",
            "spark.dynamicAllocation.executorIdleTimeout": "300"
          }
        }
      ]
    }
  }'
```

若要修改工作群組 AWS CLI 中的預設 Spark 屬性，請在更新工作群組時使用 `engine-configuration`組態。這些變更會套用至未來的新互動式工作階段。

```
aws athena update-work-group \
  --region "REGION" \
  --work-group "WORKGROUP_NAME" \
  --configuration-updates '{
    "EngineVersion": {
      "SelectedEngineVersion": "Apache Spark version 3.5"
    },
    "ExecutionRole": "EXECUTION_ROLE",
    "EngineConfiguration": {
      "Classifications": [
        {
          "Name": "spark-defaults",
          "Properties": {
            "spark.dynamicAllocation.minExecutors": "1",
            "spark.dynamicAllocation.initialExecutors": "2",
            "spark.dynamicAllocation.maxExecutors": "12",
            "spark.dynamicAllocation.executorIdleTimeout": "300"
          }
        }
      ]
    }
  }'
```