

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

# Amazon EMR
<a name="automation-ref-emr"></a>

 AWS Systems Manager 自动化为 Amazon EMR 提供了预定义的运行手册。有关运行手册的更多信息，请参阅[使用运行手册](https://docs.aws.amazon.com/systems-manager/latest/userguide/automation-documents.html)。有关如何查看运行手册内容的信息，请参阅 [查看运行手册内容](automation-runbook-reference.md#view-automation-json)。

**Topics**
+ [`AWSSupport-AnalyzeEMRLogs`](automation-awssupport-analyzeemrlogs.md)
+ [`AWSSupport-DiagnoseEMRLogsWithAthena`](awssupport-diagnose-emr-logs-with-athena.md)

# `AWSSupport-AnalyzeEMRLogs`
<a name="automation-awssupport-analyzeemrlogs"></a>

 **描述** 

此运行手册可帮助识别在 Amazon EMR 集群上运行任务时出现的错误。运行手册分析文件系统上已定义日志的列表，并查找预定义关键字的列表。这些日志条目用于创建 Amazon Events CloudWatch 事件，因此您可以根据事件采取任何必要的操作。或者，运行手册将日志条目发布到您选择的 Amazon Log CloudWatch s 日志组。此运行手册目前在日志文件中查找以下错误和模式：
+  container\$1out\$1of\$1memory – YARN 容器内存不足，运行作业可能会失败。
+  yarn\$1nodemanager\$1health：CORE 或 TASK 节点在磁盘中的运行空间不足，将无法运行任务。
+  node\$1state\$1change：MASTER 节点无法访问核心或 TASK 节点。
+  step\$1failure：EMR 步骤已失败。
+  no\$1core\$1nodes\$1running：当前没有 CORE 节点在运行，集群运行状况不佳。
+  hdfs\$1missing\$1blocks：缺少 HDFS 块可能会导致数据丢失。
+  hdfs\$1high\$1util：HDFS 利用率较高，这可能会影响作业和集群运行状况。
+  instance\$1controller\$1restart：实例控制器进程已重启。此进程对集群运行状况至关重要。
+  instance\$1controller\$1restart\$1legacy：实例控制器进程已重启。此进程对集群运行状况至关重要。
+  high\$1load：检测到平均负载过高，这可能会影响节点运行状况报告或导致超时或减速。
+  yarn\$1node\$1blacklisted：CORE 或 TASK 节点已被 YARN 列入黑名单，无法运行任务。
+  yarn\$1node\$1lost：CORE 或 TASK 节点已被 YARN 标记为丢失，这可能是连接问题。

 与指定的关联的 `ClusterID` 实例必须由 AWS Systems Manager管理。您可以运行此自动化一次，将此自动化安排为按特定的时间间隔运行，或者删除以前由某个自动化创建的时间安排。此运行手册支持 Amazon EMR 发行版 5.20 至 6.30。

 [运行此自动化（控制台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-AnalyzeEMRLogs) 

**文档类型**

自动化

**所有者**

Amazon

**平台**

Linux、macOS、Windows

**参数**
+ AutomationAssumeRole

  类型：字符串

  描述：（可选）允许 Systems Manager Automation 代表您执行操作 AWS Identity and Access Management (IAM) 角色的 Amazon 资源名称（ARN）。如果未指定角色，Systems Manager Automation 将使用启动此运行手册的用户的权限。
+ ClusterID

  类型：字符串

  描述：（必需）要分析其节点日志的集群的 ID。
+ 操作

  类型：字符串

  有效值：运行一次 \$1 计划 \$1 移除计划 

  描述：（必需）要在集群上执行的操作。
+ IntervalTime

  类型：字符串

  有效值：5 分钟 \$1 10 分钟 \$1 15 分钟

   描述：（可选）运行自动化的间隔时间。此参数仅在您为 `Operation` 参数指定 `Schedule` 时适用。
+ LogToCloudWatchLogs

  类型：字符串

  有效值：是 \$1 否

   描述：（可选）如果您指定此参数`yes`的值，则自动化会使用`CloudWatchLogGroup`参数中指定的名称创建一个 CloudWatch 日志日志组，以存储任何匹配的日志条目。
+ CloudWatchLogGroup

  类型：字符串

   描述：（可选）您要在其中存储任何匹配的 CloudWatch 日志条目的日志组的名称。此参数仅在您为 `LogToCloudWatchLogs` 参数指定 `yes` 时适用。
+ CreateLogInsightsDashboard

  类型：字符串

  有效值：是 \$1 否

   描述：（可选）如果指定`yes`，则创建 CloudWatch 仪表板（如果尚不存在）。此参数仅在您为 `LogToCloudWatchLogs` 参数指定 `yes` 时适用。
+ CreateMetricFilters

  类型：字符串

  有效值：是 \$1 否

   描述：（可选）指定`yes`是否要为 CloudWatch 日志组创建指标筛选器。此参数仅在您为 `LogToCloudWatchLogs` 参数指定 `yes` 时适用。

**所需的 IAM 权限**

`AutomationAssumeRole` 参数需要执行以下操作才能成功使用运行手册。
+  `ssm:StartAutomationExecution` 
+  `ssm:GetDocument` 
+  `ssm:ListDocuments` 
+  `ssm:DescribeAutomationExecutions` 
+  `ssm:DescribeAutomationStepExecutions` 
+  `ssm:GetAutomationExecution` 
+  `ssm:DescribeInstanceInformation` 
+  `ssm:ListCommandInvocations` 
+  `ssm:ListCommands` 
+  `ssm:SendCommand` 
+  `iam:CreateRole` 
+  `iam:DeleteRole` 
+  `iam:GetRolePolicy` 
+  `iam:PutRolePolicy` 
+  `iam:DeleteRolePolicy` 
+  `iam:passrole` 
+  `cloudformation:DescribeStacks` 
+  `cloudformation:DeleteStack` 
+  `cloudformation:CreateStack` 
+  `events:DeleteRule` 
+  `events:RemoveTargets` 
+  `events:PutTargets` 
+  `events:PutRule` 
+  `events:DescribeRule` 
+  `logs:DescribeLogGroups` 
+  `logs:CreateLogGroup` 
+  `logs:PutMetricFilter` 
+  `cloudwatch:PutDashboard` 
+  `elasticmapreduce:ListInstances` 
+  `elasticmapreduce:DescribeCluster` 

 **文档步骤** 
+  `aws:executeAwsApi` - 收集在 `ClusterID` 参数中指定的 Amazon EMR 集群的相关信息。
+  `aws:branch` - 根据输入进行分支。
  +  如果提供的操作是 `Run Once` 或 `Schedule`：
    +  `aws:assertAwsResourceProperty` - 验证集群是否可用。
    +  `aws:executeAwsApi`-收集集群中运行的所有实例。 IDs 
    +  `aws:assertAwsResourceProperty` - 验证 SSM 代理是否在集群中的所有实例上运行。
    +  `aws:branch` - 根据您指定运行自动化一次还是按计划运行进行分支。
      +  如果提供的操作是 `Run Once`：
        +  `aws:branch` - 根据在 `LogToCloudWatchLogs` 参数中指定的值进行分支。
          +  如果 `LogToCloudWatchLogs` 值为 `yes`：
            +  `aws:executeScript`-检查参数中指定名称的 CloudWatch 日志组是否`CloudWatchLogGroup`已经存在。如果不存在，则使用指定的名称创建组。
            +  `aws:branch` - 根据在 `CreateMetricFilters` 参数中指定的值进行分支。
              +  如果 `CreateMetricFilters` 值为 `yes`：
                +  `aws:executeAwsApi` - 为每个指标筛选器运行 12 个步骤 
                +  `aws:branch` - 根据在 `CreateLogInsightsDashboard` 参数中指定的值进行分支。
                  +  如果 `CreateLogInsightsDashboard` 值为 `yes`：
                    +  `aws:executeAwsApi`-使用`CloudWatchLogGroup`参数中指定的相同名称创建 CloudWatch仪表板（如果尚不存在）。
                  +  如果 `CreateLogInsightsDashboard` 值为 `no`：
                    +  `aws:runCommand` - 运行 Shell 脚本以查找集群中每个实例的日志模式。
              +  如果 `CreateMetricFilters` 值为 `no`：
                +  `aws:branch` - 根据在 `CreateLogInsightsDashboard` 参数中指定的值进行分支。
                  +  如果 `CreateLogInsightsDashboard` 值为 `yes`：
                    +  `aws:executeAwsApi`-使用`CloudWatchLogGroup`参数中指定的相同名称创建 CloudWatch仪表板（如果尚不存在）。
                  +  如果 `CreateLogInsightsDashboard` 值为 `no`：
                    +  `aws:runCommand` - 运行 Shell 脚本以查找集群中每个实例的日志模式。
          +  如果 `LogToCloudWatchLogs` 值为 `no`：
            +  `aws:executeAwsApi` - 运行 Shell 脚本以查找集群中每个实例的日志模式。
      +  如果提供的操作是 `Schedule`：
        +  `aws:createStack`-创建针对此运行手册的 Amazon EventBridge 事件。
  +  如果提供的操作是 `Remove Schedule`：
    +  `aws:executeAwsApi` - 验证集群是否存在时间表。
    +  `aws:deleteStack` - 删除时间表。

 **输出** 

GetClusterInformation.ClusterName

GetClusterInformation.ClusterState

ListingClusterInstances. 实例 IDs

CreatingScheduleCloudFormationStack.StackStatus

RemovingScheduleByDeletingScheduleCloudFormationStack.StackStatus

CheckIfLogGroupExists。输出

FindLogPatternOnEMRNode.CommandId

# `AWSSupport-DiagnoseEMRLogsWithAthena`
<a name="awssupport-diagnose-emr-logs-with-athena"></a>

**描述** 

该`AWSSupport-DiagnoseEMRLogsWithAthena`运行手册使用与数据目录集成的亚马逊 Athena 帮助诊断亚马逊 EMR 日志。 AWS Glue Amazon Athena 用于查询 Amazon EMR 日志文件，以获取容器日志和/或节点日志以及特定日期范围或基于关键字的搜索的可选参数。

运行手册可以自动检索现有集群的 Amazon EMR 日志位置，或者您可以指定 Amazon S3 日志位置。为了分析日志，运行手册：
+ 创建 AWS Glue 数据库并在 Amazon EMR Amazon S3 日志位置执行 Amazon Athena 数据定义语言 (DDL) 查询，为集群日志和已知问题列表创建表。
+ 执行数据操纵语言 (DML) 查询，在 Amazon EMR 日志中搜索已知问题模式。这些查询会按照 Amazon S3 文件路径返回检测到的问题列表、出现次数以及匹配的关键词数量。
+ 结果将上传到您在前缀下指定的 Amazon S3 存储桶`saw_diagnose_EMR_known_issues`。
+ 运行手册返回 Amazon Athena 的查询结果，重点介绍来自预定义子集的调查结果、建议以及对亚马逊知识中心 (KC) 文章的引用。
+  完成或失败后，上传到 Amazon S3 存储桶的 AWS Glue 数据库和已知问题文件将被删除。

 **如何工作？** 

 使用 Amazon Athena 对 Amazon EMR 日志`AWSSupport-DiagnoseEMRLogsWithAthena`进行分析，以检测错误并重点介绍调查结果、建议和相关知识中心文章。

运行手册执行以下步骤：
+ 使用集群 ID 获取 Amazon EMR 集群日志位置或输入 Amazon S3 位置以检索日志位置和大小。
+ 根据日志位置大小提供 Athena 成本估算。
+ 在运行 Athena 查询并继续执行后续步骤之前，请向指定的 IAM 委托人申请批准，即可获得批准。
+ 将已知问题上传到指定的 Amazon S3 存储桶，创建 AWS Glue 数据库和表。
+ 对亚马逊 EMR 日志数据执行 Athena 查询。查询可以按日期范围、关键字和两个条件进行搜索，也可以根据提供的输入在不带筛选条件的情况下运行。
+ 分析结果，重点介绍调查结果、建议和相关的 KC 文章。
+ 亚马逊 Athena DML 的输出链接查询结果。
+ 通过移除已创建的数据库、表和已上传的已知问题来清理环境。

**文档类型**

自动化

**所有者**

Amazon

**平台**

/

该 AutomationAssumeRole 参数需要以下操作才能成功使用运行手册：
+ 雅典娜：GetQueryExecution
+ 雅典娜：StartQueryExecution
+ 雅典娜：GetPreparedStatement
+ 雅典娜：CreatePreparedStatement
+ 胶水：GetDatabase
+ 胶水：CreateDatabase
+ 胶水：DeleteDatabase
+ 胶水：CreateTable
+ 胶水：GetTable
+ 胶水：DeleteTable 
+ 弹性地图减少：DescribeCluster
+ s3：ListBucket
+ s3：GetBucketVersioning
+ s3：ListBucketVersions
+ s3：GetBucketPublicAccessBlock
+ s3：GetBucketPolicyStatus
+ s3：GetObject
+ s3：GetBucketLocation
+ 定价：GetProducts
+ 定价：GetAttributeValues
+ 定价：DescribeServices
+ 定价：ListPriceLists

**重要**  
 要限制仅访问此自动化所需的资源，请将以下策略附加到信任 SSM 服务的 IAM 角色。将 “分区”、“区域” 和 “帐户” 替换为执行运行手册的分区、区域和账号的相应值。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "elasticmapreduce:DescribeCluster",
                "glue:GetDatabase",
                "athena:GetQueryExecution",
                "athena:StartQueryExecution",
                "athena:GetPreparedStatement",
                "athena:CreatePreparedStatement",
                "s3:ListBucket",
                "s3:GetBucketVersioning",
                "s3:ListBucketVersions",
                "s3:GetBucketPublicAccessBlock",
                "s3:GetBucketPolicyStatus",
                "s3:GetObject",
                "s3:GetBucketLocation",
                "pricing:GetProducts",
                "pricing:GetAttributeValues",
                "pricing:DescribeServices",
                "pricing:ListPriceLists"
            ],
            "Resource": "*"
        },
        {
            "Sid": "RestrictPutObjects",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::*/*/results/*",
                "arn:aws:s3:::*/*/saw_diagnose_emr_known_issues/*"
            ]
        },
        {
            "Sid": "RestrictDeleteAccess",
            "Effect": "Allow",
            "Action": [
                "s3:DeleteObject",
                "s3:DeleteObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::*/*/saw_diagnose_emr_known_issues/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "glue:GetDatabase",
                "glue:CreateDatabase",
                "glue:DeleteDatabase"
            ],
            "Resource": [
                "arn:aws:glue:us-east-1:111122223333:database/saw_diagnose_emr_database_*",
                "arn:aws:glue:us-east-1:111122223333:table/saw_diagnose_emr_database_*/*",
                "arn:aws:glue:us-east-1:111122223333:userDefinedFunction/saw_diagnose_emr_database_*/*",
                "arn:aws:glue:us-east-1:111122223333:catalog"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "glue:CreateTable",
                "glue:GetTable",
                "glue:DeleteTable"
            ],
            "Resource": [
                "arn:aws:glue:us-east-1:111122223333:table/saw_diagnose_emr_database_*/saw_diagnose_emr_known_issues",
                "arn:aws:glue:us-east-1:111122223333:table/saw_diagnose_emr_database_*/saw_diagnose_emr_logs_table",
                "arn:aws:glue:us-east-1:111122223333:table/saw_diagnose_emr_database_*/j_*",
                "arn:aws:glue:us-east-1:111122223333:database/saw_diagnose_emr_database_*",
                "arn:aws:glue:us-east-1:111122223333:catalog"
            ]
        }
    ]
}
```

------

 **说明** 

按照这些步骤对自动化进行配置：

1. [AWSSupport-DiagnoseEMRLogsWithAthena](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-DiagnoseEMRLogsWithAthena/description)在 “文档” AWS Systems Manager 下方导航。

1. 选择 Execute automation（执行自动化）。

1. 要输入参数，请输入以下内容：
   + **AutomationAssumeRole （可选）：**

     允许 Systems Manager Automation 代表您执行操作的 AWS Identity and Access Management (IAM) 角色的亚马逊资源名称 (ARN)。如果未指定角色，Systems Manager Automation 将使用启动此运行手册的用户的权限。
   + **集群 ID（必填）：**

     亚马逊 EMR 集群 ID。
   + **S3LogLocation （可选）：**

     亚马逊 S3 亚马逊 EMR 日志位置。输入路径样式的 URL Amazon S3 位置，例如：。`s3://amzn-s3-demo-bucket/myfolder/j-1K48XXXXXXHCB/`如果 Amazon EMR 集群已终止超过`30`天数，请提供此参数。
   + **S3BucketName （必填）：**

      用于上传已知问题列表的 Amazon S3 存储桶名称，以及 Amazon Athena 查询的输出。该存储桶应[启用封锁公共访问功能](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-control-block-public-access.html)，并且与 Amazon EMR 集群位于同一 AWS 区域和账户。
   + **批准者（必填）：**

     能够批准或拒绝操作的 AWS 经过身份验证的委托人列表。您可以使用以下任一格式指定委托人：用户名、用户 ARN、IAM 角色 ARN 或 IAM 代入角色 ARN。最大审批者数量为 10。
   + **FetchNodeLogsOnly （可选）：**

      如果设置为`true`，则自动化会诊断 Amazon EMR 应用程序容器日志。默认值为 `false`。
   + **FetchContainersLogsOnly（可选）：**

      如果设置为`true`，则自动化会诊断 Amazon EMR 容器日志。默认值为 `false`。
   + **EndSearchDate （可选）：**

      日志搜索的结束日期。如果提供，则自动化将专门搜索在指定日期之前生成的日志，格式为 YYYY-MM-DD（例如：`2024-12-30`）。
   + **DaysToCheck （可选）：**

      如果`EndSearchDate`提供此参数，则需要使用此参数来确定追溯搜索指定日志的天数。`EndSearchDate`最大值为`30`天。默认值为 `1`。
   + **SearchKeywords （可选）：**

      要在日志中搜索的关键字列表，以逗号分隔。关键字不能包含单引号或双引号。  
![\[Input parameters form for AWS Systems Manager Automation with various fields and options.\]](http://docs.aws.amazon.com/zh_cn/systems-manager-automation-runbooks/latest/userguide/images/awssupport-diagnose-emr-logs-with-athena_input_parameters.png)

1. 选择**执行**。

1. 自动化启动。

1. 文档将执行以下步骤：
   + **getLogLocation:**

     通过查询指定的 Amazon EMR 集群 ID 来检索 Amazon S3 日志位置。如果自动化无法从 Amazon EMR 集群 ID 中查询日志位置，则运行手册将使用输入参数。`S3LogLocation`
   + **branchOnValid日志：**

     验证 Amazon EMR 日志的位置。如果位置有效，则继续估算对亚马逊 EMR 日志执行查询时的 Amazon Athena 潜在成本。
   + **estimateAthenaCosts:**

     确定 Amazon EMR 日志的大小，并提供对日志数据集执行 Athena 扫描的成本估算。对于非商业区域（非AWS 分区），此步骤仅提供日志大小，而无需估算成本。可以使用指定区域的 Athena 定价文档来计算成本。
   + **批准自动化：**

     等待指定的 IAM 委托人批准后继续执行自动化的后续步骤。批准通知包含 Amazon EMR 日志上的 Amazon Athena 扫描的估计费用，以及有关自动配置的资源的详细信息。
   + **uploadKnownIssuesExecuteAthenaQueries:**

     将预定义的已知问题上传到`S3BucketName`参数中指定的 Amazon S3 存储桶。创建 AWS Glue 数据库和表。根据输入参数在数据库 AWS Glue 中执行 Amazon Athena 查询。
   + **getQueryExecution状态：**

     一直等待，直到 Amazon Athena 查询执行处于状态。`SUCCEEDED`Amazon Athena DML 查询在亚马逊 EMR 集群日志中搜索错误和异常。
   + **analyzeAthenaResults:**

     分析 Amazon Athena 结果，提供来自一组预定义映射的调查结果、建议和知识中心 (KC) 文章。
   + **getAnalyzeResults查询 1：ExecutionStatus**

     等待，直到查询执行处于`SUCCEEDED`状态。Amazon Athena DML 查询分析了之前的 DML 查询的结果。此分析查询将返回匹配的异常以及解决方案和 KC 文章
   + **getAnalyzeResultsQuery2：ExecutionStatus**

     等待，直到查询执行处于`SUCCEEDED`状态。Amazon Athena DML 查询分析了之前的 DML 查询的结果。此分析查询将返回在每个 Amazon S3 日志路径中 exceptions/errors 检测到的列表。
   + **printAthenaQueries消息:**

     打印亚马逊 Athena DML 查询结果的链接。
   + **CleanupResources：**

     通过删除已创建的 AWS Glue 数据库来清理资源，并删除在 Amazon EMR 日志存储桶中创建的已知问题文件。

1. 完成后，请查看 “输出” 部分，了解执行的详细结果：

   **输出提供了 Athena 查询结果的三个链接：**
   + 列出在 Amazon EMR 集群日志中发现的所有错误和经常发生的异常以及相应的日志位置（Amazon S3 前缀）。
   + Amazon EMR 日志中匹配的唯一已知异常摘要，以及建议的解决方案和 KC 文章，以帮助进行故障排除。
   + 有关特定错误和异常在 Amazon S3 日志路径中出现位置的详细信息，以支持进一步诊断。  
![\[Output section showing query links for exception summaries and analysis in AWS logs.\]](http://docs.aws.amazon.com/zh_cn/systems-manager-automation-runbooks/latest/userguide/images/awssupport-diagnose-emr-logs-with-athena_outputs.png)

 **参考** 

Systems Manager Automation
+ [运行此自动化（控制台）](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-DiagnoseEMRLogsWithAthena/description)
+ [运行自动化](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-working-executing.html)
+ [设置自动化](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-setup.html)
+ [支持自动化工作流登录页面](https://aws.amazon.com/premiumsupport/technology/saw/)

AWS 服务文档
+ 有关更多信息，请参阅 [Amazon EMR 集群故障排除](https://docs.aws.amazon.com//emr/latest/ManagementGuide/emr-troubleshoot.html)