存储日志 - Amazon EMR

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

存储日志

要在 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 在 re AWS : post 上。

使用登录所需的权限 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"]