

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# EMR Serverless 的默认应用程序配置
<a name="default-configs"></a>

您可以在应用程序级别为同一应用程序下提交的所有作业指定一组通用的运行时和监控配置。这减少了因需要为每个作业提交相同配置而产生的额外开销。

您可以在以下时间点修改配置：
+ [在作业提交时声明应用程序级配置。](#default-configs-declare)
+ [在作业运行期间覆盖默认配置。](#default-configs-override)

以下部分提供了更多详细信息和更多上下文的示例。

## 在应用程序级别声明配置
<a name="default-configs-declare"></a>

您可以为在应用程序下提交的作业指定应用程序级日志记录和运行时配置属性。

**`monitoringConfiguration`**  
要为随应用程序提交的作业指定日志配置，请使用 [https://docs.amazonaws.cn/emr-serverless/latest/APIReference/API_MonitoringConfiguration.html](https://docs.amazonaws.cn/emr-serverless/latest/APIReference/API_MonitoringConfiguration.html) 字段。有关 EMR Serverless 日志记录的更多信息，请参阅 [存储日志](logging.md)。

**`runtimeConfiguration`**  
要指定运行时配置属性（如 `spark-defaults`），请在 `runtimeConfiguration` 字段中提供配置对象。这将影响您随应用程序提交的所有作业的默认配置。有关更多信息，请参阅 [Hive 配置覆盖参数](jobs-hive.md#hive-defaults-configurationOverrides) 和 [Spark 配置覆盖参数](jobs-spark.md#spark-defaults-configurationOverrides)。  
可用的配置分类因特定的 EMR Serverless 发行版而异。例如，自定义 Log4j `spark-driver-log4j2` 和 `spark-executor-log4j2` 的分类仅适用于 6.8.0 及更高版本。有关特定于应用程序的属性列表，请参阅 [Spark 作业属性](jobs-spark.md#spark-defaults) 和 [Hive 作业属性](jobs-hive.md#hive-defaults)。  
您还可以在应用程序级别配置 [Apache Log4j2 属性](log4j2.md)、[Amazon Secrets Manager 数据保护](secrets-manager.md)和 [Java 17 运行时](using-java-runtime.md)。  
要在应用程序级别传递 Secrets Manager 密钥，请将以下策略附加到需要使用密钥创建或更新 EMR Serverless 应用程序的用户和角色。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "SecretsManagerPolicy",
      "Effect": "Allow",
      "Action": [
        "secretsmanager:GetSecretValue",
        "secretsmanager:DescribeSecret"
      ],
      "Resource": [
        "arn:aws:secretsmanager:us-east-1:123456789012:secret:my-secret-name-123abc"
      ]
    },
    {
      "Sid": "KMSDecryptPolicy",
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt"
      ],
      "Resource": [
        "arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012"
      ]
    }
  ]
}
```
有关为密钥创建自定义策略的更多信息，请参阅《Amazon Secrets Manager 用户指南》**中的 [Amazon Secrets Manager权限策略示例](https://docs.amazonaws.cn/secretsmanager/latest/userguide/auth-and-access_examples.html)。

**注意**  
您在应用程序级别指定的 `runtimeConfiguration` 映射到 [https://docs.amazonaws.cn/emr-serverless/latest/APIReference/API_StartJobRun.html](https://docs.amazonaws.cn/emr-serverless/latest/APIReference/API_StartJobRun.html) API 中的 `applicationConfiguration`。

### 示例声明
<a name="default-configs-declare-example"></a>

以下示例展示了如何使用 `create-application` 声明默认配置。

```
aws emr-serverless create-application \
    --release-label release-version  \
    --type SPARK \
    --name my-application-name \
    --runtime-configuration '[
        {
            "classification": "spark-defaults",
            "properties": {
                "spark.driver.cores": "4",
                "spark.executor.cores": "2",
                "spark.driver.memory": "8G",
                "spark.executor.memory": "8G",
                "spark.executor.instances": "2",
                "spark.hadoop.javax.jdo.option.ConnectionDriverName":"org.mariadb.jdbc.Driver",
                "spark.hadoop.javax.jdo.option.ConnectionURL":"jdbc:mysql://db-host:db-port/db-name",
                "spark.hadoop.javax.jdo.option.ConnectionUserName":"connection-user-name",
                "spark.hadoop.javax.jdo.option.ConnectionPassword": "EMR.secret@SecretID"
            }
        },
        {
            "classification": "spark-driver-log4j2",
            "properties": {
                "rootLogger.level":"error", 
                "logger.IdentifierForClass.name": "classpathForSettingLogger",
                "logger.IdentifierForClass.level": "info"
            }
        }
    ]' \
    --monitoring-configuration '{
        "s3MonitoringConfiguration": {
            "logUri": "s3://amzn-s3-demo-logging-bucket/logs/app-level"
        },
        "managedPersistenceMonitoringConfiguration": {
            "enabled": false
        }
    }'
```

## 任务运行期间覆盖配置
<a name="default-configs-override"></a>

您可以使用 [https://docs.amazonaws.cn/emr-serverless/latest/APIReference/API_StartJobRun.html](https://docs.amazonaws.cn/emr-serverless/latest/APIReference/API_StartJobRun.html) API 为应用程序配置和监控配置指定配置覆盖。然后，EMR Serverless 合并您在应用程序级别和作业级别指定的配置，以确定作业执行的配置。

合并时的粒度级别如下：
+ **[https://docs.amazonaws.cn/emr-serverless/latest/APIReference/API_ConfigurationOverrides.html#emrserverless-Type-ConfigurationOverrides-applicationConfiguration](https://docs.amazonaws.cn/emr-serverless/latest/APIReference/API_ConfigurationOverrides.html#emrserverless-Type-ConfigurationOverrides-applicationConfiguration)**：分类类型，例如 `spark-defaults`。
+ **[https://docs.amazonaws.cn/emr-serverless/latest/APIReference/API_ConfigurationOverrides.html#emrserverless-Type-ConfigurationOverrides-monitoringConfiguration](https://docs.amazonaws.cn/emr-serverless/latest/APIReference/API_ConfigurationOverrides.html#emrserverless-Type-ConfigurationOverrides-monitoringConfiguration)**：配置类型，例如 `s3MonitoringConfiguration`。

**注意**  
您在 [https://docs.amazonaws.cn/emr-serverless/latest/APIReference/API_StartJobRun.html](https://docs.amazonaws.cn/emr-serverless/latest/APIReference/API_StartJobRun.html) 设置的配置优先级将取代您在应用程序级别设置的配置。

有关优先级排名的更多信息，请参阅 [Hive 配置覆盖参数](jobs-hive.md#hive-defaults-configurationOverrides) 和 [Spark 配置覆盖参数](jobs-spark.md#spark-defaults-configurationOverrides)。

启动作业时，如果未指定特定配置，则会从应用程序继承。如果在作业级别声明配置，可以执行以下操作：
+ **覆盖现有配置**：在 `StartJobRun` 请求中提供相同的配置参数和覆盖值。
+ **添加其他配置**：在 `StartJobRun` 请求中添加新的配置参数，并指定所需的值。
+ **删除现有配置**：要删除应用程序*运行时配置*，请提供要删除的配置的密钥，然并为该配置传递一个空声明 `{}`。我们不建议删除任何包含作业运行所需参数的分类。例如，如果您尝试删除 [Hive 作业所需的属性](https://docs.amazonaws.cn/)，作业将会失败。

  要删除应用程序*监控配置*，请针对相关配置类型使用适当的方法：
  + **`cloudWatchLoggingConfiguration`**：要删除 `cloudWatchLogging`，请将启用标志传递为 `false`。
  + **`managedPersistenceMonitoringConfiguration`**：要删除托管持久性设置并回退到默认启用状态，请为配置传递一个空声明 `{}`。
  + **`s3MonitoringConfiguration`**：要删除 `s3MonitoringConfiguration`，请为配置传递一个空声明 `{}`。

### 示例覆盖
<a name="default-configs-override-example"></a>

以下示例显示了在 `start-job-run` 提交作业期间可以执行的不同操作。

```
aws emr-serverless start-job-run \
    --application-id your-application-id \
    --execution-role-arn your-job-role-arn \
    --job-driver '{
        "sparkSubmit": {
            "entryPoint": "s3://us-east-1.elasticmapreduce/emr-containers/samples/wordcount/scripts/wordcount.py", 
            "entryPointArguments": ["s3://amzn-s3-demo-destination-bucket1/wordcount_output"]
        }
    }' \
    --configuration-overrides '{
        "applicationConfiguration": [ 
            {
                // Override existing configuration for spark-defaults in the application
                "classification": "spark-defaults", 
                "properties": {
                    "spark.driver.cores": "2",
                    "spark.executor.cores": "1",
                    "spark.driver.memory": "4G",
                    "spark.executor.memory": "4G"
                }
            },
            {
                // Add configuration for spark-executor-log4j2
                "classification": "spark-executor-log4j2",
                "properties": {
                    "rootLogger.level": "error", 
                    "logger.IdentifierForClass.name": "classpathForSettingLogger",
                    "logger.IdentifierForClass.level": "info"
                }
            },
            {
                // Remove existing configuration for spark-driver-log4j2 from the application
                "classification": "spark-driver-log4j2",
                "properties": {}
            }
        ],
        "monitoringConfiguration": {
            "managedPersistenceMonitoringConfiguration": {
                // Override existing configuration for managed persistence
                "enabled": true
            },
            "s3MonitoringConfiguration": {
                // Remove configuration of S3 monitoring
            },
            "cloudWatchLoggingConfiguration": {
                // Add configuration for CloudWatch logging
                "enabled": true
            }
        }
    }'
```

作业执行时，将根据 [Hive 配置覆盖参数](jobs-hive.md#hive-defaults-configurationOverrides) 和 [Spark 配置覆盖参数](jobs-spark.md#spark-defaults-configurationOverrides) 中描述的优先级覆盖排名应用以下分类和配置。
+ 分类 `spark-defaults` 将根据作业级别指定的属性进行更新。此分类仅考虑 `StartJobRun` 中包含的属性。
+ 分类 `spark-executor-log4j2` 将添加到现有分类列表中。
+ 分类 `spark-driver-log4j2` 将被删除。
+ `managedPersistenceMonitoringConfiguration` 配置将根据作业级别的配置进行更新。
+ `s3MonitoringConfiguration` 的配置将被删除。
+ `cloudWatchLoggingConfiguration` 的配置将添加到现有监控配置中。