

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 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) 섹션을 참조하세요.  
애플리케이션 수준에서 데이터 보호를 위해 [Apache Log4j2 속성](log4j2.md), [데이터 보호를 위한AWS 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"
      ]
    }
  ]
}
```
보안 암호에 대한 사용자 지정 정책 생성에 대한 자세한 내용은 **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`에 대한 구성이 기존 모니터링 구성에 추가됩니다.