

# 使用 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 属性。将忽略带有其他前缀的属性。
+ 在 Athena 上，并非所有 Spark 属性都可用于自定义配置。如果您提交的 `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 格式传递您的配置信息。这将启动具有您指定的配置的会话。

要从 AWS CLI 中指定自定义 Spark 属性，请在启动交互式会话时使用 `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"
          }
        }
      ]
    }
  }'
```