本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
存储日志
要在 EMR Serverless 上监控您的任务进度并排除作业故障,您可以选择 EMR Serverless 存储和提供应用程序日志的方式。提交任务运行时,您可以将托管存储、Amazon S3 和 Amazon 指定 CloudWatch 为日志选项。
使用 CloudWatch,您可以指定要使用的日志类型和日志位置,也可以接受默认的类型和位置。有关 CloudWatch 日志的更多信息,请参阅使用 Amazon 登录EMR无服务器模式 CloudWatch。对于托管存储和 S3 日志记录,下表显示了如果您选择托管存储、Amazon S3 存储桶或两者兼而有之,则可以预期的日志位置和用户界面可用性。
选项 | 事件日志 | 容器日志 | 应用程序用户界面 |
---|---|---|---|
托管存储 |
存储在托管存储中 |
存储在托管存储中 |
支持 |
托管存储和 S3 存储桶 |
存放在两个地方 |
存储在 S3 存储桶中 |
支持 |
Amazon S3 存储桶 |
存储在 S3 存储桶中 |
存储在 S3 存储桶中 |
不支持 1 |
1 我们建议您保持 “托管存储” 选项处于选中状态。否则,您将无法使用内置应用程序UIs。
使用托管EMR存储进行无服务器登录
默认情况下,EMRServerless 将应用程序日志安全地存储在亚马逊EMR托管存储中,最长可保存 30 天。
注意
如果您关闭默认选项,Amazon 将EMR无法代表您对任务进行故障排除。
要从 EMR Studio 关闭此选项,请在 “提交作业” 页面的 “其他设置” 部分中取消选中 “允许 AWS 将日志保留 30 天” 复选框。
要从中关闭此选项 AWS CLI,请在提交作业运行时使用该managedPersistenceMonitoringConfiguration
配置。
{ "monitoringConfiguration": { "managedPersistenceMonitoringConfiguration": { "enabled": false } } }
使用 Amazon S3 存储桶进行EMR无服务器登录
在您的任务可以向 Amazon S3 发送日志数据之前,您必须在任务运行时角色的权限策略中包含以下权限。将
替换为日志记录存储桶的名称。amzn-s3-demo-logging-bucket
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": [ "arn:aws:s3:::
amzn-s3-demo-logging-bucket
/*" ] } ] }
要设置 Amazon S3 存储桶来存储来自的日志 AWS CLI,请在开始运行任务时使用s3MonitoringConfiguration
配置。为此,请在配置--configuration-overrides
中提供以下内容。
{ "monitoringConfiguration": { "s3MonitoringConfiguration": { "logUri": "s3://
amzn-s3-demo-logging-bucket
/logs/" } } }
对于未启用重试功能的批处理作业,EMRServerless 会将日志发送到以下路径:
'/applications/<applicationId>/jobs/<jobId>'
EMRServerless 版本 7.1.0 及更高版本支持流式作业和批处理作业的重试尝试。如果您在启用重试的情况下运行作业,EMRServerless 会自动在日志路径前缀中添加尝试次数,这样您就可以更好地区分和跟踪日志。
'/applications/<applicationId>/jobs/<jobId>/attempts/<attemptNumber>/'
使用 Amazon 登录EMR无服务器模式 CloudWatch
当您向EMR无服务器应用程序提交任务时,可以选择 Amazon CloudWatch 作为存储应用程序日志的选项。这允许您使用 CloudWatch 日志分析功能,例如 Logs Insights 和 Live Tail。 CloudWatch 您也可以将日志从其他系统流式传输 CloudWatch 到其他系统,例如 OpenSearch 进行进一步分析。
EMRServerless 为驱动程序日志提供实时日志记录。您可以使用 live tail 功能或通过 tai CloudWatch CLI l 命令 CloudWatch 实时查看日志。
默认情况下,EMR无服务器的 CloudWatch 日志记录处于禁用状态。要启用它,请参阅中的配置AWS CLI。
注意
Amazon 实时 CloudWatch 发布日志,因此它会从工作人员那里获得更多资源。如果您选择较低的工作人员容量,则对作业运行时间的影响可能会增加。如果您启用 CloudWatch 日志记录,我们建议您选择更大的工作人员容量。如果每秒交易量 (TPS) 速率太低,日志发布也可能会受到限制。PutLogEvents
所有服务(包括EMR无服务器)的 CloudWatch 限制配置都是全局的。有关更多信息,请参阅如何确定日志中的限制? CloudWatch
使用登录所需的权限 CloudWatch
在您的任务可以向 Amazon 发送日志数据之前 CloudWatch,您必须在任务运行时角色的权限策略中包含以下权限。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:
AWS 区域
:111122223333
:*" ] }, { "Effect": "Allow", "Action": [ "logs:PutLogEvents", "logs:CreateLogGroup", "logs:CreateLogStream", "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:AWS 区域
:111122223333
:log-group:my-log-group-name
:*" ] } ] }
AWS CLI
要将 Amazon CloudWatch 设置为存储来自的 EMR Serverless 日志 AWS CLI,请在开始运行任务时使用cloudWatchLoggingConfiguration
配置。为此,请提供以下配置替代项。或者,您还可以提供日志组名称、日志流前缀名称、日志类型和加密密钥ARN。
如果您未指定可选值,则使用默认日志流将日志 CloudWatch 发布到默认日志组/aws/emr-serverless
/applications/
。applicationId
/jobs/jobId
/worker-type
EMRServerless 版本 7.1.0 及更高版本支持流式作业和批处理作业的重试尝试。如果您为作业启用了重试功能,EMRServerless 会自动在日志路径前缀中添加尝试次数,这样您就可以更好地区分和跟踪日志。
'/applications/
<applicationId>
/jobs/<jobId>
/attempts/<attemptNumber>
/worker-type'
以下显示了使用EMR无服务器的默认设置开启 Amazon CloudWatch 日志记录所需的最低配置:
{ "monitoringConfiguration": { "cloudWatchLoggingConfiguration": { "enabled": true } } }
以下示例显示了您在开启 EMR Serverless 的 Amazon CloudWatch 日志记录时可以指定的所有必需和可选配置。此示例下方还列出了支持的logTypes
值。
{ "monitoringConfiguration": { "cloudWatchLoggingConfiguration": { "enabled": true, // Required "logGroupName": "Example_logGroup", // Optional "logStreamNamePrefix": "Example_logStream", // Optional "encryptionKeyArn": "key-arn", // Optional "logTypes": { "SPARK_DRIVER": ["stdout", "stderr"] //List of values } } } }
默认情况下,EMRServerless 仅向发布驱动程序 stdout 和 stderr 日志。 CloudWatch如果需要其他日志,则可以在该logTypes
字段中指定容器角色和相应的日志类型。
以下列表显示了您可以为logTypes
配置指定的支持的工作器类型:
- Spark
-
-
SPARK_DRIVER : ["STDERR", "STDOUT"]
-
SPARK_EXECUTOR : ["STDERR", "STDOUT"]
-
- Hive
-
-
HIVE_DRIVER : ["STDERR", "STDOUT", "HIVE_LOG", "TEZ_AM"]
-
TEZ_TASK : ["STDERR", "STDOUT", "SYSTEM_LOGS"]
-