EMR Serverless에 대한 기본 애플리케이션 구성 - Amazon EMR

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

EMR Serverless에 대한 기본 애플리케이션 구성

동일한 애플리케이션에서 제출한 모든 작업에 대해 애플리케이션 수준에서 일반적인 런타임 및 모니터링 구성 세트를 지정할 수 있습니다. 그러면 각 작업에 대해 동일한 구성을 제출해야 하는 경우와 관련된 추가 오버헤드가 줄어듭니다.

다음 시점에 구성을 수정할 수 있습니다.

다음 섹션에서는 추가 컨텍스트에 대한 예제와 세부 정보를 제공합니다.

애플리케이션 수준에서 구성 선언

애플리케이션에서 제출하는 작업에 대해 애플리케이션 수준 로깅 및 런타임 구성 속성을 지정할 수 있습니다.

monitoringConfiguration

애플리케이션으로 제출하는 작업에 대한 로그 구성을 지정하려면 monitoringConfiguration 필드를 사용합니다. EMR Serverless의 로깅에 대한 자세한 내용은 로그 저장 섹션을 참조하세요.

runtimeConfiguration

spark-defaults와 같은 런타임 구성 속성을 지정하려면 runtimeConfiguration 필드에 구성 객체를 제공합니다. 이는 애플리케이션에서 제출하는 모든 작업의 기본 구성에 영향을 미칩니다. 자세한 내용은 Hive 구성 재정의 파라미터Spark 구성 재정의 파라미터 단원을 참조하세요.

사용 가능한 구성 분류는 특정 EMR Serverless 릴리스에 따라 다릅니다. 예를 들어 사용자 지정 Log4j spark-driver-log4j2spark-executor-log4j2에 대한 분류는 릴리스 6.8.0 이상에서만 사용할 수 있습니다. 애플리케이션별 속성 목록은 Spark 작업 속성Hive 작업 속성 섹션을 참조하세요.

애플리케이션 수준에서 데이터 보호를 위해 Apache Log4j2 속성, 데이터 보호를 위한AWS Secrets Manager, Java 17 런타임을 구성할 수도 있습니다.

애플리케이션 수준에서 Secrets Manager 보안 암호를 전달하려면 보안 암호를 사용해 EMR Serverless 애플리케이션을 생성하거나 업데이트해야 하는 사용자 및 역할에 다음 정책을 연결합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "SecretsManagerPolicy", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "kms:Decrypt" ], "Resource": "arn:aws:secretsmanager:your-secret-arn" } ] }

보안 암호에 대한 사용자 지정 정책 생성에 대한 자세한 내용은 AWS Secrets Manager 사용 설명서의 AWS Secrets Manager에 대한 권한 정책 예제를 참조하세요.

참고

애플리케이션 수준에서 지정하는 runtimeConfigurationStartJobRun API에서 applicationConfiguration에 매핑됩니다.

선언 예제

다음 예제에서는 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 } }'

작업 실행 중 구성 재정의

StartJobRun API를 사용하여 애플리케이션 구성 및 모니터링 구성에 대한 구성 재정의를 지정할 수 있습니다. 그런 다음, EMR Serverless는 애플리케이션 수준과 작업 수준에서 지정한 구성을 병합하여 작업 실행을 위한 구성을 결정합니다.

병합이 수행될 때의 세분화 수준은 다음과 같습니다.

참고

StartJobRun에서 제공하는 구성의 우선순위는 애플리케이션 수준에서 제공하는 구성을 대체합니다.

우선순위 지정에 대한 자세한 내용은 Hive 구성 재정의 파라미터Spark 구성 재정의 파라미터 섹션을 참조하세요.

작업을 시작하는 경우 특정 구성을 지정하지 않으면 애플리케이션에서 상속됩니다. 작업 수준에서 구성을 선언하는 경우 다음 작업을 수행할 수 있습니다.

  • 기존 구성 재정의 - 재정의 값으로 StartJobRun 요청에 동일한 구성 파라미터를 제공합니다.

  • 추가 구성 추가 - 지정하려는 값으로 StartJobRun 요청에 새 구성 파라미터를 추가합니다.

  • 기존 구성 제거 - 애플리케이션 런타임 구성을 제거하려면 제거하려는 구성의 키를 제공하고 구성에 대한 빈 {} 선언을 전달합니다. 작업 실행에 필요한 파라미터가 포함된 분류는 제거하지 않는 것이 좋습니다. 예를 들어 Hive 작업에 필요한 속성을 제거하려고 하면 작업이 실패합니다.

    애플리케이션 모니터링 구성을 제거하려면 관련 구성 유형에 적합한 방법을 사용합니다.

    • cloudWatchLoggingConfiguration - cloudWatchLogging을 제거하려면 활성화된 플래그를 false로 전달합니다.

    • managedPersistenceMonitoringConfiguration - 관리형 지속성 설정을 제거하고 기본 활성화됨 상태로 되돌리려면 구성에 대한 빈 선언({})을 전달합니다.

    • s3MonitoringConfiguration - s3MonitoringConfiguration을 제거하려면 구성에 대한 빈 선언({})을 전달합니다.

재정의 예제

다음 예제에서는 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 구성 재정의 파라미터Spark 구성 재정의 파라미터에서 설명하는 우선순위 재정의 순위에 따라 다음 분류 및 구성이 적용됩니다.

  • spark-defaults 분류는 작업 수준에서 지정된 속성으로 업데이트됩니다. 이 분류에 대해서는 StartJobRun에 포함된 속성만 고려합니다.

  • spark-executor-log4j2 분류는 기존 분류 목록에 추가됩니다.

  • spark-driver-log4j2 분류가 제거됩니다.

  • managedPersistenceMonitoringConfiguration에 대한 구성은 작업 수준에서의 구성으로 업데이트됩니다.

  • s3MonitoringConfiguration에 대한 구성이 제거됩니다.

  • cloudWatchLoggingConfiguration에 대한 구성이 기존 모니터링 구성에 추가됩니다.