

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

# EMR Serverless 的預設應用程式組態
<a name="default-configs"></a>

您可以在應用程式層級為您在相同應用程式下提交的所有任務指定一組通用的執行時間和監控組態。這可減少與需要為每個任務提交相同組態相關聯的額外額外負荷。

您可以在下列時間點修改組態：
+ [在任務提交時宣告應用程式層級組態。](#default-configs-declare)
+ [在任務執行期間覆寫預設組態。](#default-configs-override)

下列各節提供更多詳細資訊和進一步內容的範例。

## 在應用程式層級宣告組態
<a name="default-configs-declare"></a>

您可以為您在應用程式下提交的任務指定應用程式層級記錄和執行時間組態屬性。

**`monitoringConfiguration`**  
若要指定您隨應用程式提交之任務的日誌組態，請使用 [https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_MonitoringConfiguration.html](https://docs.aws.amazon.com/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)。  
您也可以為[AWS Secrets Manager 資料保護](secrets-manager.md)設定 [Apache Log4j2 屬性](log4j2.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"
      ]
    }
  ]
}
```
如需為秘密建立自訂政策的詳細資訊，請參閱《 *AWS Secrets Manager 使用者指南*》中的[適用於 的許可政策範例 AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access_examples.html)。

**注意**  
您在應用程式層級指定的 `runtimeConfiguration`會映射至 [https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_StartJobRun.html](https://docs.aws.amazon.com/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.aws.amazon.com/emr-serverless/latest/APIReference/API_StartJobRun.html](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_StartJobRun.html) API 指定應用程式組態和監控組態的組態覆寫。然後，EMR Serverless 會合併您在應用程式層級和任務層級指定的組態，以判斷任務執行的組態。

合併發生時的精細程度層級如下：
+ **[https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_ConfigurationOverrides.html#emrserverless-Type-ConfigurationOverrides-applicationConfiguration](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_ConfigurationOverrides.html#emrserverless-Type-ConfigurationOverrides-applicationConfiguration)** - 分類類型，例如 `spark-defaults`。
+ **[https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_ConfigurationOverrides.html#emrserverless-Type-ConfigurationOverrides-monitoringConfiguration](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_ConfigurationOverrides.html#emrserverless-Type-ConfigurationOverrides-monitoringConfiguration)** - 組態類型，例如 `s3MonitoringConfiguration`。

**注意**  
您在 提供的組態優先順序會[https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_StartJobRun.html](https://docs.aws.amazon.com/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.aws.amazon.com/)，任務將會失敗。

  若要移除應用程式*監控組態*，請使用相關組態類型的適當方法：
  + **`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`會新增至現有的監控組態。