Amazon EMR
管理指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

配置集群日志记录和调试

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

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

默认日志文件

默认情况下,每个集群会将日志文件写到主节点上。这些文件将写入 /mnt/var/log/ 目录。如使用 SSH 连接主节点中所述,您可以通过使用 SSH 连接主节点来访问这些日志。因为这些日志存在于主节点上,所以当主节点终止 (因为集群关闭或出现错误) 时,这些日志文件将不再可用。

您不需要启用任何功能或工具将日志文件写到主节点上。这是 Amazon EMR 和 Hadoop 的默认行为。

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

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

  • 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/,依此类推。

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

将日志文件存档到 Amazon S3

注意

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

您可以配置集群以定期将存储在主节点上的日志文件存档到 Amazon S3。这可确保集群终止后 (无论是正常关闭或是由于错误所致)。日志文件仍可用。Amazon EMR 每隔 5 分钟便将日志文件存档到 Amazon S3。

要将日志文件存档到 Amazon S3,您必须在启动集群时启用此功能。您可以使用控制台、CLI 或 API 执行此操作。默认情况下,使用控制台启动的集群已启用日志存档。对于使用 CLI 或 API 启动的集群,必须手动启用到 Amazon S3 的日志记录。

使用控制台将日志文件存档到 Amazon S3

  1. Open the Amazon EMR console at https://console.amazonaws.cn/elasticmapreduce/.

  2. 选择 Create cluster

  3. 选择 Go to advanced options

  4. Cluster Configuration 部分的 Logging 字段中,接受默认选项:Enabled

    此字段决定 Amazon EMR 是否将详细日志数据捕获到 Amazon S3。您只能在创建集群时设置此选项。有关更多信息,请参阅 查看日志文件

  5. Log folder S3 location 字段中,键入 (或浏览到) 用于存储日志的 Amazon S3 路径。您也可以让控制台为您生成一个 Amazon S3 路径。如果键入的文件夹名称在存储桶中不存在,系统将创建该文件夹。

    设定此值后,Amazon EMR 会将日志文件从集群中的 EC2 实例复制到 Amazon S3。这可以防止在集群结束及托管集群的 EC2 实例终止时丢失日志文件。这些日志在排除故障时非常有用。

    有关更多信息,请参阅 查看日志文件

  6. 按照计划和配置集群中所述继续创建集群。

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

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

  • 要将文件记录到 Amazon S3,请键入以下命令并将 myKey 替换为您的 EC2 密钥对的名称。

    aws emr create-cluster --name "Test cluster" --release-label emr-4.0.0 --log-uri s3://mybucket/logs/ --applications Name=Hadoop Name=Hive Name=Pig --use-default-roles --ec2-attributes KeyName=myKey --instance-type m4.large --instance-count 3

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

注意

如果您之前未创建默认 EMR 服务角色和 EC2 实例配置文件,请先键入 aws emr create-default-roles 创建它们,然后再键入 create-cluster 子命令。

有关如何在 AWS CLI 中使用 Amazon EMR 命令的更多信息,请参阅 https://docs.amazonaws.cn/cli/latest/reference/emr

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

注意

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

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

  • 重要

    此设置在以前的 4.x 版本的 EMR 中不起作用。如果您需要配置此选项,请使用 4.3.0 以上的版本。

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

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

    请键入以下命令,将 myKey 替换为您的 EC2 密钥对的名称。

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

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

    注意

    如果您之前未创建默认 EMR 服务角色和 EC2 实例配置文件,请先键入 aws emr create-default-roles 创建它们,然后再键入 create-cluster 子命令。

有关如何在 AWS CLI 中使用 Amazon EMR 命令的更多信息,请参阅 https://docs.amazonaws.cn/cli/latest/reference/emr

启用调试工具

借助调试工具,您可以更轻松地从 EMR 控制台浏览日志文件。有关更多信息,请参阅 查看调试工具中的日志文件。当您对集群启用调试时,Amazon EMR 将日志文件存档到 Amazon S3,然后为这些文件建立索引。然后,您就可以使用控制台以直观的方式浏览集群的步骤、作业、任务和任务尝试日志。

要在 EMR 控制台中使用调试工具,则在使用控制台、CLI 或者 API 时启动集群时,您必须启用调试。

使用 Amazon EMR 控制台启用调试工具

  1. Open the Amazon EMR console at https://console.amazonaws.cn/elasticmapreduce/.

  2. 选择 Create cluster

  3. 选择 Go to advanced options

  4. Cluster Configuration (集群配置) 部分的 Logging (日志记录) 字段中,选择 Enabled (已启用)。不能在未启用日志记录的情况下启用调试。

  5. Log folder S3 location (日志文件夹 S3 位置) 字段中,键入用于存储日志的 Amazon S3 路径。

  6. Debugging (调试) 字段中,选择 Enabled (已启用)

    此调试选项创建一个 Amazon SQS 交换,以将调试消息发布到 Amazon EMR 服务后端。将消息发布到此交换功能可能发生费用。有关更多信息,请参阅 http://www.amazonaws.cn/sqs

  7. 按照计划和配置集群中所述继续创建集群。

使用 AWS CLI 启用调试工具

要使用 AWS CLI 启用调试,请键入带 --enable-debugging 参数的 create-cluster 子命令。您还必须在启用调试时指定 --log-uri 参数。

  • 要使用 AWS CLI 启用调试,请键入以下命令并将 myKey 替换为您的 EC2 密钥对的名称。

    aws emr create-cluster --name "Test cluster" --release-label emr-4.1.0 --log-uri s3://mybucket/logs/ --enable-debugging --applications Name=Hadoop Name=Hive Name=Pig --use-default-roles --ec2-attributes KeyName=myKey --instance-type m4.large --instance-count 3

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

    注意

    如果您之前未创建默认 EMR 服务角色和 EC2 实例配置文件,请先键入 aws emr create-default-roles 创建它们,然后再键入 create-cluster 子命令。

有关如何在 AWS CLI 中使用 Amazon EMR 命令的更多信息,请参阅 https://docs.amazonaws.cn/cli/latest/reference/emr

例 使用 Java SDK 启用调试

使用以下 StepConfig 启用调试:

StepConfig stepConfig = new StepConfig() .withName("Enable Debugging") .withActionOnFailure("TERMINATE_JOB_FLOW") .withHadoopJarStep(new HadoopJarStepConfig() .withJar("command-runner.jar") .withArgs("state-pusher-script");

调试选项信息

Amazon EMR 4.1 或更高版本支持在所有区域调试。

Amazon EMR 创建一个 Amazon SQS 队列以处理调试数据。消息可能发生费用。但是,Amazon SQS 拥有含多达 1,000,000 个请求的免费套餐。有关更多信息,请参阅 Amazon SQS 详细信息页面

调试需要用到角色;您的服务角色和实例配置文件必须让您能够使用所有的 Amazon SQS API 操作。如果您的角色挂载到 Amazon EMR 托管策略,则您无需对角色做出任何修改。如果您有自定义角色,则需要添加 sqs:* 权限。有关更多信息,请参阅 为 IAM 角色配置对 AWS 服务的 Amazon EMR 权限