本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
存储日志
要在 EMR Serverless 上监控您的任务进度并排除作业故障,请选择 EMR Serverless 存储和提供应用程序日志的方式。提交任务运行时,请将托管存储、Amazon S3 和 Amazon 指定 CloudWatch 为日志选项。
使用 CloudWatch,指定要使用的日志类型和日志位置,或者接受默认的类型和位置。有关 CloudWatch 日志的更多信息,请参阅使用 Amazon 登录 EMR 无服务器 CloudWatch。对于托管存储和 S3 日志记录,下表列出了如果您选择托管存储、Amazon S3 存储桶或两者兼而有之,则可以预期的日志位置和用户界面可用性。
| 选项 | 事件日志 | 容器日志 | 应用程序 UI |
|---|---|---|---|
|
托管存储 |
存储在托管存储中 |
存储在托管存储中 |
支持 |
|
托管存储和 S3 存储桶 |
存放在两个位置 |
存储在 S3 存储桶中 |
支持 |
|
Amazon S3 存储桶 |
存储在 S3 存储桶中 |
存储在 S3 存储桶中 |
不支持1 |
1 我们建议您保持 “托管存储” 选项处于选中状态。否则,您将无法使用内置应用程序 UIs。
使用托管存储的 EMR Serverless 日志记录
默认情况下,EMR Serverless 将应用程序日志安全存储在 Amazon EMR 托管存储中,最长 30 天。
注意
如果关闭默认选项,Amazon EMR 将无法代表您对作业进行故障排除。示例:您无法从 EMR 无服务器控制台访问 Spark-UI。
要从 EMR Studio 关闭此选项,请取消选中 “提交作业” 页面的 “其他设置” 部分中的 “允许 Amazon 将日志保留 30 天” 复选框。
要从中关闭此选项 Amazon CLI,请在提交作业运行时使用该managedPersistenceMonitoringConfiguration配置。
{ "monitoringConfiguration": { "managedPersistenceMonitoringConfiguration": { "enabled": false } } }
如果您的 EMR Serverless 应用程序位于带有 Amazon S3 的 VPC 终端节点的私有子网中,并且您附加了终端节点策略来控制访问权限,请为 EMR Serverless 添加以下权限以存储和提供应用程序日志。Resource替换为访问 Amazon S3 的私有子网的示例策略中可用区域表中的AppInfo存储桶。
此外,使用aws:SourceVpc条件密钥确保请求通过 VPC 终端节点所连接的 VPC 传输。
使用 Amazon S3 存储桶的 EMR Serverless 日志记录
在您的任务可以向 Amazon S3 发送日志数据之前,请在任务运行时角色的权限策略中包含以下权限。将 替换为日志记录存储桶的名称。amzn-s3-demo-logging-bucket
要设置 Amazon S3 存储桶来存储来自的日志 Amazon CLI,请在开始运行任务时使用s3MonitoringConfiguration配置。为此,请在配置中提供以下 --configuration-overrides。
{ "monitoringConfiguration": { "s3MonitoringConfiguration": { "logUri": "s3://amzn-s3-demo-logging-bucket/logs/" } } }
对于未启用重试的批处理作业,EMR Serverless 会将日志发送到以下路径:
'/applications/<applicationId>/jobs/<jobId>'
EMR Serverless 将 Spark 驱动程序日志存储在以下路径中
'/applications/<applicationId>/jobs/<jobId>/SPARK_DRIVER/'
EMR Serverless 将 Spark 执行器日志存储在以下路径中
'/applications/<applicationId>/jobs/<jobId>/SPARK_EXECUTOR/<EXECUTOR-ID>'
<EXECUTOR-ID>是一个整数。
EMR Serverless 7.1.0 及更高版本支持流处理作业和批处理作业重试。如果您在启用重试的情况下运行作业,EMR Serverless 会自动在日志路径前缀中添加重试编号,以便更好地区分和跟踪日志。
'/applications/<applicationId>/jobs/<jobId>/attempts/<attemptNumber>/'
使用 Amazon 登录 EMR 无服务器 CloudWatch
当您向 EMR Serverless 应用程序提交任务时,请选择 Amazon CloudWatch 作为存储应用程序日志的选项。这允许您使用 CloudWatch 日志分析功能,例如 Logs Insights 和 Live Tail。 CloudWatch 您也可以将日志从其他系统流式传输 CloudWatch 到其他系统,例如 OpenSearch 进行进一步分析。
EMR Serverless 可实时记录驱动程序日志。您可以使用实时跟踪功能或通过 CloudWatch CLI tail 命令 CloudWatch 实时访问日志。
默认情况下,EMR Ser CloudWatch verless 的日志记录处于禁用状态。要启用它,请使用中的配置Amazon CLI。
注意
Amazon 实时 CloudWatch 发布日志,因此它会从工作人员那里获得更多资源。如果您选择较小的工作线程容量,可能会增加作业运行延迟。如果您启用 CloudWatch 日志记录,我们建议您选择更大的工作人员容量。如果每秒事务数(TPS)速率对于 PutLogEvents 来说太低,日志发布也可能会受到限制。 CloudWatch 限制配置适用于所有服务,包括 EMR Serverless。有关更多信息,请参阅如何确定日志中的限制? CloudWatch
使用登录所需的权限 CloudWatch
在您的任务可以向 Amazon 发送日志数据之前 CloudWatch,请在任务运行时角色的权限策略中包含以下权限。
Amazon CLI
要将 Amazon 设置为存储 CloudWatch 来自 EMR Serverless 的日志 Amazon CLI,请在开始运行任务时使用cloudWatchLoggingConfiguration配置。为此,请提供以下配置覆盖。或者,还可以提供日志组名称、日志流前缀名称、日志类型和加密密钥 ARN。
如果您未指定可选值,则使用默认日志流将日志 CloudWatch 发布到默认日志组/aws/emr-serverless/applications/。applicationId/jobs/jobId/worker-type
EMR Serverless 7.1.0 及更高版本支持流处理作业和批处理作业重试。如果作业启用了重试,EMR Serverless 会自动在日志路径前缀中添加重试编号,以便更好地区分和跟踪日志。
'/applications/<applicationId>/jobs/<jobId>/attempts/<attemptNumber>/worker-type'
以下内容演示了使用 EMR Serverless 的默认设置开启 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 } } } }
默认情况下,EMR Serverless 仅向发布驱动程序 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"]
-