EMR无服务器的默认应用程序配置 - Amazon EMR

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

EMR无服务器的默认应用程序配置

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

您可以在以下时间点修改配置:

以下各节提供了更多详细信息以及进一步背景的示例。

在应用程序级别声明配置

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

monitoringConfiguration

要为通过应用程序提交的作业指定日志配置,请使用字monitoringConfiguration段。有关EMR无服务器登录的更多信息,请参阅存储日志

runtimeConfiguration

要指定运行时配置属性(例如)spark-defaults,请在runtimeConfiguration字段中提供配置对象。这会影响您通过应用程序提交的所有作业的默认配置。有关更多信息,请参阅Hive 配置覆盖参数Spark 配置覆盖参数

可用的配置分类因特定的EMR无服务器版本而异。例如,自定义 Log4j spark-driver-log4j2 和的分类仅spark-executor-log4j2在 6.8.0 及更高版本中可用。有关特定于应用程序的属性的列表,请参阅Spark 作业属性和。Hive 作业属性

您还可以在应用程序级别配置AWS Secrets Manager 用于数据保护Apache Log4j2 属性Java 17 运行时

要在应用程序级别传递 Secrets Manager 密钥,请将以下策略附加到需要使用密钥创建或更新EMR无服务器应用程序的用户和角色。

{ "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中的权限策略示例

注意

runtimeConfiguration您在应用程序级别指定的映射到applicationConfigurationStartJobRunAPI。

声明示例

以下示例说明如何使用声明默认配置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 } }'

在作业运行期间覆盖配置

您可以使用为应用程序配置和监控配置指定配置替代。StartJobRunAPIEMR然后,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将添加到现有的监视配置中。