我们使用机器学习技术将英文博客翻译为简体中文。您可以点击导航栏中的“中文(简体)”切换到英文版本。
将亚马逊 EMR 步骤日志从亚马逊 EC2 实例推送到亚马逊 CloudWatch 日志
将这些日志推送到
CloudWatch 代理是一个可在您的服务器上自主持续运行的软件包。您可以安装和配置 CloudWatch 代理以收集来自 EC2 实例、本地主机和容器化应用程序的系统和应用程序日志。CloudWatch 处理和存储 CloudWatch 代理收集的日志,这进一步有助于监控您的基础设施和应用程序的性能和运行状况。
在这篇文章中,我们创建了一个 EMR 集群并将任务的 EMR 步骤日志集中在 CloudWatch 中。这将使您更轻松地管理 EMR 集群、排除问题和监控性能。如果您想使用 CloudWatch 收集和可视化实时日志、指标和事件数据,从而简化基础设施和应用程序维护,则此解决方案特别有用。
解决方案概述
这篇文章中提出的解决方案基于特定的配置,其中 EMR 步骤并发级别设置为 1。这意味着一次只能在集群上运行一个步骤。请务必注意,如果将 EMR 步骤并发级别设置为大于 1 的值,则解决方案可能无法按预期运行。我们强烈建议您在实施本文中提出的解决方案之前验证您的
下图说明了解决方案架构。
工作流程包括以下步骤:
- 用户启动 Apache Spark EMR 作业,在 EMR 集群上创建一个步骤。使用 Apache Spark,工作负载分布在 EMR 集群的不同节点上。
- 在集群的每个节点(EC2 实例)中,CloudWatch 代理监视不同的日志目录,捕获日志文件中的新条目并将其推送到 CloudWatch。
-
用户可以从 CloudWatch 控制台查看访问不同日志组的步骤日志。由 Amazon EMR 编写的步骤日志如下:
- 控制器 — 有关步骤处理的信息。如果您的步骤在加载时失败,则可以在此日志中找到堆栈跟踪。
- stderr — Spark 处理该步骤时的标准错误通道。
-
stdout
— Spark 处理步骤时的标准输出通道。请注意,对于 Spark 应用程序,驱动程序的日志输出仅出现在以客户端模式运行的应用程序的步骤日志中。更多详细信息可以在
EMR 提交步骤文档 中找到。
我们在这篇文章中提供了一
您还应该意识到,此堆栈部署的某些资源在继续使用时会产生成本。
在接下来的部分中,我们将完成以下步骤:
-
创建引导脚本并将其上传到
Amazon Simple Storage Servic e (Amazon S3) 存储桶。 -
使用 CloudFormation 模板创建以下资源:
-
适用于 Amazon
EMR 的 亚马逊云科技 身份和访问管理 (IAM) 实例配置文件角色。 -
带有 Cloud
Watch 代理配置的 亚马逊云科技 Systems Manager 参数。 - 以 Spark 作为已安装应用程序的 EMR 集群。
- 一份 Spark 任务。
-
适用于 Amazon
- 在 CloudWatch 控制台上监控 Spark 日志。
先决条件
这篇文章假设你有以下几点:
-
一个
亚马逊云科技 账户 。 - 用于存储引导脚本的 S3 存储桶。
-
在
亚马逊虚拟私有云 (亚马逊 VPC) 中创建的 VPC,您的 EMR 集群将在其中启动。 -
默认 IAM 服务角色,用于获取 亚马逊云科技 服务和资源的亚马逊 EMR 权限。您可以在 亚马逊云科技 命令行接口 (
AWS CLI) 中使用 aws emr create-default-role s。命令 创建这些角色 -
如果您计划通过 SSH 而不是
亚马逊云科技 Systems Manager 会话管理器 连接到集群,则可选的 EC2 密钥对 。
创建引导脚本并将其上传到 S3 存储桶
有关更多信息,请参阅
要创建并上传引导脚本,请完成以下步骤:
-
使用以下内容创建名为
bootstrap_cloudwatch_agent.sh的本地文件: - 在亚马逊 S3 控制台上,选择您的 S3 存储桶。
- 在 对象 选项卡上,选择 上传 。
- 选择 “ 添加文件 ” ,然后选择引导脚本。
-
选择
上传
,然后选择文件名:
bootstrap_cloudwatch_agent.sh。 - 选择 复制 S3 URI 。我们在后面的步骤中使用这个值。
使用 CloudFormation 模板配置资源
选择 L aunch St ack 在您的账户中启动 CloudFormation 堆栈并部署模板:
此模板创建 IAM 角色、IAM 实例配置文件、系统管理员参数和 EMR 集群。集群启动
CloudFormation 向导将要求您修改或提供以下参数:
-
实例类型
-所有
实例组 的实例 类型 。默认为 m4.xlarge。 - InstanceCountCore — 核心 实例组中的实例数量。默认值为 2。
-
emrReleaseLabel
— 您要使用的
亚马逊 EMR 版本 标签。 默认值为 emr-6.9.0。 - bootstrapScriptPath — 您之前复制的 CloudWatch 代理安装引导脚本的 S3 路径。
- 子网 -启动集群的 EC2 子网。您必须提供此参数。
- ec2keyPairName — 用于连接集群节点的可选 EC2 密钥对,作为会话管理器的替代方案。
监控日志流
成功部署 CloudFormation 堆栈后,在 CloudWatch 控制台上,选择导航窗
格 中的日志组
。然后按前缀
/aws/emr/
master 筛选日志组。
日志组中的 ID 对应于 EMR 主节点的 EC2 实例 ID。如果您有多个 EMR 集群,则可以使用此 ID 根据主节点 ID 来识别特定的 EMR 集群。
在日志组中,您将找到三种不同的日志流。
日志流包含以下信息:
-
stepstdout — Spark 处理该步骤
时的标准输出通道。
-
step-stderr — Spark 处理该步骤
时的标准错误通道。
-
步进控制器
-有关步骤处理的信息。如果您的步骤在加载时失败,则可以在此日志中找到堆栈跟踪。
清理
为避免将来您的账户产生费用,请删除您在本演练中创建的资源。只要集群处于活动状态,EMR 集群就会产生费用,因此完成后请将其停止。
- 在 CloudFormation 控制台的导航窗格中,选择 堆栈。
-
选择你启动的堆栈(
EMR-Cloudwatch-demo),然后选择删除。 -
清空 您创建的 S3 存储桶 。 -
删除 您创建的 S3 存储桶 。
结论
现在您已经完成了本演练中的步骤,您已经在集群主机上运行了 CloudWatch 代理并配置为将 EMR 步骤日志推送到 CloudWatch。使用此功能,您可以有效地监控在 Amazon EMR 上运行的 Spark 作业的运行状况和性能,实时检测关键问题并快速确定根本原因。
您可以通过 CloudFormation 模板打包和部署此解决方案,例如此示例模板,该模板创建 IAM 实例配置文件角色、系统管理员参数和 EMR 集群。
为了更进一步,可以考虑在 CloudWatch 警报中使用这些日志,以获取
作者简介
Ennio Pa stor
e 是 亚马逊云科技 数据实验室团队的高级数据架构师。他热衷于与新技术有关的一切事物,这些新技术会对企业和一般生计产生积极影响。Ennio 在数据分析方面拥有 10 多年的经验。他帮助公司定义和实施跨行业的数据平台,例如电信、银行、游戏、零售和保险。
*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。