配置 Amazon EMR 集群日志记录和调试 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

配置 Amazon EMR 集群日志记录和调试

在规划集群时要确定的事项之一是您希望提供多少调试支持。当首次开发数据处理应用程序时,我们建议您在集群上测试该应用程序,处理一小部分但具有代表性的数据子集。执行此操作时,您可能希望利用Amazon EMR 提供的所有调试工具,例如将日志文件存档到Amazon S3。

在完成开发和将数据处理应用程序投入全面生产后,您可以选择缩减调试。这样做可以节省在 Amazon S3 中存储日志文件存档的成本,并降低数据库上的处理负载,因为不再需要向 Amazon S3 写入状态。当然,如果这样做,在出现错误时可用于调查问题的工具则会相对较少。

默认日志文件

默认情况下,每个集群都会将日志文件写到主节点上。这些文件将写入 /mnt/var/log/ 目录。您可以通过使用连接到主节点SSH来访问它们,如中所述使用连接到 Amazon EMR 集群主节点 SSH。亚马逊EMR会收集由亚马逊EMR守护程序和其他亚马逊EMR进程生成的某些系统和应用程序日志,以确保有效的服务运行。

注意

如果您使用的是 Amazon 6.8.0 或更早EMR版本,则在集群终止期间,日志文件会保存到 Amazon S3,因此一旦主节点终止,您就无法访问日志文件。在集群缩减期间,Amazon 会向 Amazon S3 EMR 发布 6.9.0 及更高版本的存档日志,因此即使节点终止,集群上生成的日志文件仍会保留。

您无需启用任何功能或工具即可将日志文件写到主节点上。这是亚马逊EMR和 Hadoop 的默认行为。

一个集群可产生多种类型的日志文件,包括:

  • 步骤日志 — 这些日志由 Amazon EMR 服务生成,包含有关集群和每个步骤结果的信息。日志文件存储在主节点上的 /mnt/var/log/hadoop/steps/ 目录中。每个步骤都将其结果记录在单独编号的子目录中:第一步的子目录为 /mnt/var/log/hadoop/steps/s-stepId1/,第二步为 /mnt/var/log/hadoop/steps/s-stepId2/,依此类推。13 个字符的步骤标识符(例如 stepId 1、stepId 2)是集群所独有的。

  • Hadoop 和YARN组件日志 — 与 Apache YARN 和 MapReduce(例如)关联的组件的日志包含在中的不同文件夹中。/mnt/var/log/mnt/var/log 下 Hadoop 组件的日志文件位置有:hadoop-hdfs、hadoop-mapreduce、hadoop-httpfs 和 hadoop-yarn。该hadoop-state-pusher 目录用于存放 Hadoop 状态推送器进程的输出。

  • 引导操作日志 – 如果您的任务使用引导操作,则会记录这些操作的结果。日志文件存储在主节点上的/mnt/var/log/bootstrap-actions/ 中。每个引导操作都将其结果记录在单独编号的子目录中:第一个引导操作的子目录为 /mnt/var/log/bootstrap-actions/1/、第二个引导操作为 /mnt/var/log/bootstrap-actions/2/,依此类推。

  • 实例状态日志 — 这些日志提供有关节点的CPU内存状态和垃圾收集器线程的信息。日志文件存储在主节点上的 /mnt/var/log/instance-state/ 中。

将日志文件归档到 Amazon S3

注意

您目前不能通过 yarn logs 实用工具对 Amazon S3 使用日志聚合。

在集群缩减期间,Amazon 会向 Amazon S3 EMR 发布 6.9.0 及更高版本的存档日志,因此即使节点终止,集群上生成的日志文件仍会保留。此行为会自动启用,因此您无需执行任何操作即可将其打开。对于 Amazon 6.8.0 及更早EMR版本,您可以将集群配置为定期将存储在主节点上的日志文件存档到 Amazon S3。这可确保集群终止后(无论是正常关闭或是由于错误所致),日志文件仍可用。亚马逊每隔 5 分钟将日志文件EMR存档到 Amazon S3。

要将日志文件存档到 Amazon S3 for Amazon 6.8.0 及更早EMR版本,您必须在启动集群时启用此功能。您可以使用控制台CLI、或API。默认情况下,使用控制台启动的集群已启用日志存档。对于使用CLI或启动的集群API,必须手动启用对 Amazon S3 的登录功能。

Console
使用新控制台将日志文件存档到 Amazon S3
  1. 登录 Amazon Web Services Management Console,然后通过 https://console.aws.amazon.com/em r 打开亚马逊EMR控制台。

  2. EC2在左侧导航窗格的开下EMR,选择集群,然后选择创建集群

  3. Cluster logs(集群日志)下,选中 Publish cluster-specific logs to Amazon S3(将集群特定日志发布到 Amazon S3)复选框。

  4. Amazon S3 location(Amazon S3 位置)字段中,键入(或浏览到)存储日志的 Amazon S3 路径。如果键入的文件夹名称在存储桶中不存在,Amazon S3 将创建该文件夹。

    当您设置此值时,Amazon 会将日志文件从集群中的EC2实例EMR复制到 Amazon S3。这样可以防止在集群结束和EC2终止托管集群的实例时丢失日志文件。这些日志在排除故障时非常有用。有关更多信息,请参阅查看日志文件

  5. (可选)选中 Encrypt cluster-specific logs(加密集群特定的日志)复选框。然后,从列表中选择 Amazon KMS 密钥,输入密钥ARN或创建新密钥。此选项仅适用于亚马逊 5.30.0 及更高EMR版本,不包括版本 6.0.0。要使用此选项,请 Amazon KMS 为您的EC2实例配置文件和 Amazon EMR 角色添加权限。有关更多信息,请参阅 使用 Amazon KMS客户托管密钥加密存储在 Amazon S3 中的日志文件

  6. 选择适用于集群的任何其他选项。

  7. 要启动集群,选择 Create cluster(创建集群)。

CLI
使用将日志文件存档到 Amazon S3 Amazon CLI

要使用将日志文件存档到 Amazon S3 Amazon CLI,请键入create-cluster命令并使用--log-uri参数指定 Amazon S3 日志路径。

  1. 要将文件记录到 Amazon S3,请键入以下命令并替换 myKey 用你的 EC2 key pair 的名字。

    aws emr create-cluster --name "Test cluster" --release-label emr-7.3.0 --log-uri s3://DOC-EXAMPLE-BUCKET/logs --applications Name=Hadoop Name=Hive Name=Pig --use-default-roles --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3
  2. 如果不使用 --instance-groups 参数指定实例计数,则将启动单个主节点,其余实例将作为核心节点启动。所有节点都使用该命令中指定的实例类型。

    注意

    如果您之前没有创建默认的 Amazon EMR 服务角色和EC2实例配置文件,请在键入create-cluster子命令之前输入aws emr create-default-roles创建它们。

使用 Amazon KMS客户托管密钥加密存储在 Amazon S3 中的日志文件

在亚马逊EMR版本 5.30.0 及更高版本中(亚马逊 EMR 6.0.0 除外),您可以使用客户托管密钥加密存储在 Amazon S3 中的日志文件。 Amazon KMS要在控制台中启用此选项,请按照将日志文件归档到 Amazon S3中的步骤进行操作。您的亚马逊EC2实例配置文件和您的亚马逊EMR角色必须满足以下先决条件:

  • 用于您的集群的 Amazon EC2 实例配置文件必须具有使用权限kms:GenerateDataKey

  • 用于您的集群的 Amazon EMR 角色必须具有使用权限kms:DescribeKey

  • 必须将 Amazon EC2 实例配置文件和 Amazon EMR 角色添加到指定 Amazon KMS客户托管密钥的密钥用户列表中,如以下步骤所示:

    1. https://console.aws.amazon.com/km s 处打开 Amazon Key Management Service (Amazon KMS) 控制台。

    2. 要更改 Amazon 区域,请使用页面右上角的区域选择器。

    3. 选择要修改的KMS密钥的别名。

    4. 在密钥详细信息页面的 Key Users (密钥用户) 下,选择 Add (添加)

    5. 添加密钥用户对话框中,选择您的亚马逊EC2实例配置文件和亚马逊EMR角色。

    6. 选择添加

有关更多信息,请参阅 Amazon EMR 使用的IAM服务角色密钥管理服务开发者指南中的使用 Amazon 密钥策略

使用 Amazon CLI在 Amazon S3 中聚合日志

注意

您目前不能通过 yarn logs 实用工具使用日志聚合。您只能使用此过程支持的聚合。

日志聚合 (Hadoop 2.x) 将日志从单个应用程序的所有容器汇总到单个文件中。要使用启用到 Amazon S3 的日志聚合 Amazon CLI,您可以在集群启动时使用引导操作来启用日志聚合并指定存储日志的存储桶。

  • 要启用日志聚合,请创建名为 myConfig.json 的下列配置文件,其中包含以下内容:

    [ { "Classification": "yarn-site", "Properties": { "yarn.log-aggregation-enable": "true", "yarn.log-aggregation.retain-seconds": "-1", "yarn.nodemanager.remote-app-log-dir": "s3:\/\/DOC-EXAMPLE-BUCKET\/logs" } } ]

    键入以下命令并替换 myKey 用你的 EC2 key pair 的名字。您还可以将任何红色文本替换为自己的配置。

    aws emr create-cluster --name "Test cluster" \ --release-label emr-7.3.0 \ --applications Name=Hadoop \ --use-default-roles \ --ec2-attributes KeyName=myKey \ --instance-type m5.xlarge \ --instance-count 3 \ --configurations file://./myConfig.json

    如果不使用 --instance-groups 参数指定实例计数,则将启动单个主节点,其余实例将作为核心节点启动。所有节点都使用该命令中指定的实例类型。

    注意

    如果您之前没有创建过默认EMR服务角色和EC2实例配置文件,请在运行aws emr create-default-rolescreate-cluster子命令之前运行创建它们。

有关在中使用 Amazon EMR 命令的更多信息 Amazon CLI,请参阅Amazon CLI 命令参考

日志位置

以下列表包括了所有日志类型及其在 Amazon S3 中的位置。您可以使用它们来解决Amazon EMR 问题。

步骤日志

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/steps/<step-id>/

应用程序日志

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/containers/

此位置包含容器 stderr 以及 stdoutdirectory.infoprelaunch.outlaunch_container.sh 日志。

资源管理器日志

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<leader-instance-id>/applications/hadoop-yarn/

Hadoop HDFS

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<all-instance-id>/applications/hadoop-hdfs/

此位置包括 NameNode DataNode、和YARN TimelineServer日志。

节点管理器日志

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<all-instance-id>/applications/hadoop-yarn/

实例状态日志

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<all-instance-id>/daemons/instance-state/

Amazon EMR 配置日志

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<leader-instance-id>/provision-node/*

Hive 日志

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<leader-instance-id>/applications/hive/*

  • 要查找集群上的 Hive 日志,请删除星号(*)并将 /var/log/hive/ 附加上面的链接后。

  • 要查找 HiveServer 2 个日志,请删除星号 (*) 并附加var/log/hive/hiveserver2.log到上面的链接。

  • 要查找 Hive CLI 日志,请删除星号 (*) 并附加/var/log/hive/user/hadoop/hive.log到上面的链接。

  • 要查找 Hive Metastore Server 日志,请删除星号(*)并将 /var/log/hive/user/hive/hive.log 附加上面的链接后。

如果故障位置在 Tez 应用程序的主节点或任务节点上,请提供相应的 Hadoop 容器日志。