

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

# Amazon EMR 集群问题排查
<a name="emr-troubleshoot"></a>

 EMR 集群在复杂的生态系统中运行，该生态系统包括开源软件、自定义应用程序代码和。 AWS 服务当以上任何环节出现问题时，集群都可能失败，或者花费比您预期更长的时间才能完成。以下主题可帮助您识别集群的问题以及如何修复它们。

**Topics**
+ [哪些工具可用于对 Amazon EMR 集群进行故障排查？](emr-troubleshoot-tools.md)
+ [查看并重新启动 Amazon EMR 和应用程序进程（进程守护程序）](emr-process-restart-stop-view.md)
+ [Amazon EMR 中的常见错误集合](emr-troubleshoot-errors.md)
+ [对因错误代码而失败的 Amazon EMR 集群进行问题排查](emr-troubleshoot-failed.md)
+ [排查 Amazon EMR 集群速度缓慢的问题](emr-troubleshoot-slow.md)
+ [解决将 Amazon EMR 与 Lake Formation 配合 AWS 使用时的常见问题](emr-troubleshoot-lf.md)

关于排查 [EMR 上的 Spark 应用程序](https://aws.github.io/aws-emr-best-practices/docs/bestpractices/Applications/Spark/troubleshooting/)问题的指导。

 在开发新的 Hadoop 应用程序时，我们建议您启用调试并处理一小部分但具有代表性的数据子集以测试应用程序。您可能还需要运行应用程序 step-by-step来分别测试每个步骤。有关更多信息，请参阅[配置 Amazon EMR 集群日志记录和调试](emr-plan-debugging.md)和[步骤 5：分步测试 Amazon EMR 集群](emr-troubleshoot-failed-5-test-steps.md)。

# 哪些工具可用于对 Amazon EMR 集群进行故障排查？
<a name="emr-troubleshoot-tools"></a>

要识别和修复集群错误，您可以使用本页上描述的工具。启动集群时，您可能需要初始化一些工具。默认情况下，每个集群都可以使用其他工具。

**Topics**
+ [查看 EMR 集群详细信息](#emr-troubleshoot-tools-details)
+ [查看 EMR 集群错误详细信息](#emr-troubleshoot-errordetail)
+ [运行脚本和配置 Amazon EMR 流程](#emr-troubleshoot-tools-commands)
+ [查看日志文件](#emr-troubleshoot-tools-logs)
+ [监控 EMR 集群的性能](#emr-troubleshoot-tools-performance)

## 查看 EMR 集群详细信息
<a name="emr-troubleshoot-tools-details"></a>

您可以使用 AWS 管理控制台 AWS CLI、或 EMR API 来检索有关 EMR 集群和任务执行的详细信息。有关使用 AWS 管理控制台 和的更多信息 AWS CLI，请参阅[查看 Amazon EMR 集群状态和详细信息](emr-manage-view-clusters.md)。

### Amazon EMR 控制台详细信息窗格
<a name="emr-troubleshoot-tools-console"></a>

在 Amazon EMR 控制台上的**集群**列表中，您可查看有关您的账户和 AWS 区域中每个集群的状态的概要信息。此列表显示您过去两个月启动的所有活动和已终止的集群。从 **Clusters (集群)** 列表中，您可选择集群的 **Name (名称)** 以查看集群详细信息。此信息已进行分类，可轻松导航。

集群详细信息页面中提供的**应用程序用户界面**对排查集群的问题较为有用。它提供了 YARN 应用程序的状态，对于部分应用程序（如 Spark 应用程序），您可深入了解各种指标和方面（如作业、阶段和执行程序）。有关更多信息，请参阅 [查看 Amazon EMR 应用程序历史记录](emr-cluster-application-history.md)。此功能仅在 Amazon EMR 5.8.0 及更高版本中提供。

### Amazon EMR 命令行界面
<a name="emr-troubleshoot-tools-cli"></a>

您可以通过`--describe`参数从中找到有关集群 AWS CLI 的详细信息。

### Amazon EMR API
<a name="emr-troubleshoot-tools-api"></a>

您可以使用 `DescribeJobFlows` 操作从 API 中查找有关某一集群的详细信息。

## 查看 EMR 集群错误详细信息
<a name="emr-troubleshoot-errordetail"></a>

当 EMR 集群因错误而终止时，`DescribeCluster`和将`ListClusters` APIs 返回错误代码和错误消息。对于选定的集群错误，`ErrorDetail` 数据数组可以帮助您排查失败原因。

有关包含 `ErrorDetail` 数据的错误代码列表，请参阅 [Amazon EMR 中包含 ErrorDetail 信息的错误代码](emr-troubleshoot-error-errordetail.md)。

**注意**  
为确保向您提供最相关的信息，我们会不断完善错误消息。我们不建议您解析 `ErrorMessage` 中的文本，因为此文本可能会发生变化。

## 运行脚本和配置 Amazon EMR 流程
<a name="emr-troubleshoot-tools-commands"></a>

作为故障排除过程的一部分，您可能会发现在集群上运行自定义脚本或查看和配置集群进程很有帮助。

### 查看并重启应用程序进程
<a name="emr-troubleshoot-tools-stop-start-processes"></a>

查看集群上正在运行的进程以诊断潜在问题可能会很有帮助。您可以通过连接到集群的主节点 (master node) 停止并重新启动集群进程。有关更多信息，请参阅[查看并重新启动 Amazon EMR 和应用程序进程（进程守护程序）](emr-process-restart-stop-view.md)。

### 在不连接 SSH 的情况下运行命令和脚本
<a name="emr-troubleshoot-tools-run-scripts"></a>

要在集群上运行命令或脚本，可以使用`command-runner.jar`或者`script-runner.jar`工具，而无需与主节点 (master node) 建立 SSH 连接。有关更多信息，请参阅[在 Amazon EMR 集群上运行命令和脚本](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-commandrunner.html)。

## 查看日志文件
<a name="emr-troubleshoot-tools-logs"></a>

Amazon EMR 和 Hadoop 都会在集群运行时生成日志文件。根据在启动集群时指定的配置，您可以从多种不同工具中访问这些日志文件。有关更多信息，请参阅 [配置 Amazon EMR 集群日志记录和调试](emr-plan-debugging.md)。

### 主节点 上的日志文件
<a name="emr-troubleshoot-tools-logs-master"></a>

每个集群都会将日志文件发布到主节点上的mnt/var/log//目录。仅在集群处于运行状态时才能获取这些日志文件。

### 归档到 Amazon S3 的日志文件
<a name="emr-troubleshoot-tools-logs-s3"></a>

如果您启动集群并指定 Amazon S3 日志路径，则集群会每隔 5 分钟将存储在主节点上 mnt/var/log //中的日志文件复制到 Amazon S3。这样可确保即使在终止集群后也可以访问日志文件。因为文件的存档间隔是 5 分钟，所以可能无法获取突然终止集群的最后几分钟的状况信息。

## 监控 EMR 集群的性能
<a name="emr-troubleshoot-tools-performance"></a>

Amazon EMR 提供了多种用于监控集群性能的工具。

### Hadoop Web 界面
<a name="emr-troubleshoot-tools-hadoop-ui"></a>

每个集群都会将一组 Web 界面 (包含有关集群的信息) 发布到主节点上。您可以使用 SSH 隧道连接主节点上的这些网页，从而对它们进行访问。有关更多信息，请参阅 [查看 Amazon EMR 集群上托管的 Web 界面](emr-web-interfaces.md)。

### CloudWatch 指标
<a name="emr-troubleshoot-tools-cloudwatch"></a>

每个集群都会向报告指标 CloudWatch。 CloudWatch 是一项跟踪指标的 Web 服务，您可以使用它来设置这些指标的警报。有关更多信息，请参阅 [使用监控 Amazon EMR 指标 CloudWatch](UsingEMR_ViewingMetrics.md)。

# 查看并重新启动 Amazon EMR 和应用程序进程（进程守护程序）
<a name="emr-process-restart-stop-view"></a>

当您排除集群故障时，您可能想要列出正在运行的进程。您可能还想停止或重新启动进程。例如，在更改配置之后或在分析日志文件和错误消息从而发现特定进程的问题之后，重启程序。

集群上运行的进程有两种类型：Amazon EMR 进程（例如，实例控制器和日志推送器），以及与集群上安装的应用程序关联的进程（例如、和）。 hadoop-hdfs-namenode hadoop-yarn-resourcemanager

要在集群上直接使用进程，您首先要连接到主节点 (master node)。有关更多信息，请参阅[连接到 Amazon EMR 集群](emr-connect-master-node.md)。

## 查看正在运行的进程
<a name="emr-process-view"></a>

用来查看集群上正在运行进程的方法取决于您使用的 Amazon EMR 版本。

------
#### [ EMR 5.30.0 and 6.0.0 and later ]

**Example ：列出所有运行中的进程**  
以下示例使用`systemctl`并指定`--type`查看所有进程。  

```
systemctl --type=service
```

**Example ：列出特定的流程**  
以下示例列出含有`hadoop`名称的所有进程。  

```
systemctl --type=service | grep -i hadoop
```
输出示例：  

```
 hadoop-hdfs-namenode.service           loaded active running Hadoop namenode
 hadoop-httpfs.service                  loaded active running Hadoop httpfs
 hadoop-kms.service                     loaded active running Hadoop kms
 hadoop-mapreduce-historyserver.service loaded active running Hadoop historyserver
 hadoop-state-pusher.service            loaded active running Daemon process that processes and serves EMR metrics data.
 hadoop-yarn-proxyserver.service        loaded active running Hadoop proxyserver
 hadoop-yarn-resourcemanager.service    loaded active running Hadoop resourcemanager
 hadoop-yarn-timelineserver.service     loaded active running Hadoop timelineserver
```

**Example ：查看特定进程的详细状态报告**  
以下示例显示了`hadoop-hdfs-namenode`服务的详细状态报告。  

```
sudo systemctl status hadoop-hdfs-namenode
```
输出示例：  

```
hadoop-hdfs-namenode.service - Hadoop namenode
   Loaded: loaded (/etc/systemd/system/hadoop-hdfs-namenode.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2021-08-18 21:01:46 UTC; 26min ago
 Main PID: 9733 (java)
    Tasks: 0
   Memory: 1.1M
   CGroup: /system.slice/hadoop-hdfs-namenode.service
           ‣ 9733 /etc/alternatives/jre/bin/java -Dproc_namenode -Xmx1843m -server -XX:OnOutOfMemoryError=kill -9 %p ...

Aug 18 21:01:37 ip-172-31-20-123 systemd[1]: Starting Hadoop namenode...
Aug 18 21:01:37 ip-172-31-20-123 su[9715]: (to hdfs) root on none
Aug 18 21:01:37 ip-172-31-20-123 hadoop-hdfs-namenode[9683]: starting namenode, logging to /var/log/hadoop-hdfs/ha...out
Aug 18 21:01:46 ip-172-31-20-123 hadoop-hdfs-namenode[9683]: Started Hadoop namenode:[  OK  ]
Aug 18 21:01:46 ip-172-31-20-123 systemd[1]: Started Hadoop namenode.
Hint: Some lines were ellipsized, use -l to show in full.
```

------
#### [ EMR 4.x - 5.29.0 ]

**Example ：列出所有运行中的进程**  
以下示例列出了所有正在运行的进程。  

```
initctl list
```

------
#### [ EMR 2.x - 3.x ]

**Example ：列出所有运行中的进程**  
以下示例列出了所有正在运行的进程。  

```
ls /etc/init.d/
```

------

## 停止并重新启动进程
<a name="emr-process-restart"></a>

在确定哪些进程正在运行后，您可以根据需要将其停止然后重新启动。

------
#### [ EMR 5.30.0 and 6.0.0 and later ]

**Example : 停止进程**  
以下示例停止`hadoop-hdfs-namenode`进程。  

```
sudo systemctl stop hadoop-hdfs-namenode
```
您可以查询`status`以验证该进程是否已停止。  

```
sudo systemctl status hadoop-hdfs-namenode
```
输出示例：  

```
hadoop-hdfs-namenode.service - Hadoop namenode
  Loaded: loaded (/etc/systemd/system/hadoop-hdfs-namenode.service; enabled; vendor preset: disabled)
  Active: failed (Result: exit-code) since Wed 2021-08-18 21:37:50 UTC; 8s ago
Main PID: 9733 (code=exited, status=143)
```

**Example : 启动进程**  
以下示例启动`hadoop-hdfs-namenode`进程。  

```
sudo systemctl start hadoop-hdfs-namenode
```
您可以查询状态以确认该进程是否正在运行。  

```
sudo systemctl status hadoop-hdfs-namenode
```
输出示例：  

```
hadoop-hdfs-namenode.service - Hadoop namenode
   Loaded: loaded (/etc/systemd/system/hadoop-hdfs-namenode.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2021-08-18 21:38:24 UTC; 2s ago
  Process: 13748 ExecStart=/etc/init.d/hadoop-hdfs-namenode start (code=exited, status=0/SUCCESS)
 Main PID: 13800 (java)
    Tasks: 0
   Memory: 1.1M
   CGroup: /system.slice/hadoop-hdfs-namenode.service
           ‣ 13800 /etc/alternatives/jre/bin/java -Dproc_namenode -Xmx1843m -server -XX:OnOutOfMemoryError=kill -9 %p...
```

------
#### [ EMR 4.x - 5.29.0 ]

**Example : 停止正在运行的进程**  
以下示例停止`hadoop-hdfs-namenode`服务。  

```
sudo stop hadoop-hdfs-namenode
```

**Example ：重新启动已停止的进程**  
以下示例重新启动`hadoop-hdfs-namenode`服务。您必须使用`start`命令而不是`restart`。  

```
sudo start hadoop-hdfs-namenode
```

**Example ：查看进程状态**  
以下获取`hadoop-hdfs-namenode`的状态。您可以使用`status`命令以确认该过程是否已停止或启动。  

```
sudo status hadoop-hdfs-namenode
```

------
#### [ EMR 2.x - 3.x ]

**Example ：停止应用程序进程**  
以下示例停止`hadoop-hdfs-namenode`服务，该服务与集群上安装的 Amazon EMR 版本相关联。  

```
sudo /etc/init.d/hadoop-hdfs-namenode stop
```

**Example ：重新启动应用程序进程**  
以下示例命令重新启动`hadoop-hdfs-namenode`进程：  

```
sudo /etc/init.d/hadoop-hdfs-namenode start
```

**Example : 停止 Amazon EMR 过程**  
以下示例停止与集群上的 Amazon EMR 版本无关的进程，例如：实例控制器。  

```
sudo /sbin/stop instance-controller
```

**Example ：重新启动 Amazon EMR 进程**  
以下示例重新启动与集群上的 Amazon EMR 版本无关的进程，例如：实例控制器。  

```
sudo /sbin/start instance-controller
```

**注意**  
`/sbin/start, stop` 和 `restart` 命令是 `/sbin/intictl` 的符号链接。有关 `initctl` 的更多信息，请在命令提示中键入 `man initctl`，以查看 initctl man 页面。

------

# Amazon EMR 中的常见错误集合
<a name="emr-troubleshoot-errors"></a>

有时，集群会出现故障或数据处理速度很慢。以下各节列出了常见的集群问题。错误包括引导失败和验证错误，并提供了解决建议。

**Topics**
+ [Amazon EMR 中包含 ErrorDetail 信息的错误代码](emr-troubleshoot-error-errordetail.md)
+ [Amazon EMR 集群操作期间的资源错误](emr-troubleshoot-error-resource.md)
+ [Amazon EMR 操作期间的集群输入和输出错误](emr-troubleshoot-errors-io.md)
+ [Amazon EMR 集群操作期间的权限错误](emr-troubleshoot-error-permissions.md)
+ [Hive 集群错误](emr-troubleshoot-error-hive.md)
+ [Amazon EMR 集群操作期间的 VPC 错误](emr-troubleshoot-error-vpc.md)
+ [流处理 Amazon EMR 集群错误](emr-troubleshoot-error-streaming.md)
+ [Amazon EMR：自定义 JAR 集群错误](emr-troubleshoot-error-custom-jar.md)
+ [亚马逊 EMR AWS GovCloud （美国西部）错误](emr-troubleshoot-error-govcloud.md)
+ [查找缺少的集群](#w2aac36c21c47)

# Amazon EMR 中包含 ErrorDetail 信息的错误代码
<a name="emr-troubleshoot-error-errordetail"></a>

当 EMR 集群因错误而终止时，`DescribeCluster`和将`ListClusters` APIs 返回错误代码和错误消息。对于部分集群错误，`ErrorDetail` 数据数组可以帮助您排查失败原因。

包含 `ErrorDetail` 数组的错误提供了以下详细信息：

**`ErrorCode`**  
可用于编程访问的唯一错误代码。

**`ErrorData`**  
键值对中的标识符列表，可用于编程或手动查找。有关错误代码包含的 `ErrorData` 值的描述，请参阅错误代码的疑难解答页面。

**`ErrorMessage`**  
错误描述以及指向 Amazon EMR 文档中更多信息的链接。  
我们不建议您解析 `ErrorMessage` 中的文本，因为此文本可能会发生变化。

**Topics**
+ [引导失败](emr-troubleshoot-error-errordetail-bootstrap.md)
+ [内部错误](emr-troubleshoot-error-errordetail-internal.md)
+ [验证失败](emr-troubleshoot-error-errordetail-validation.md)

# Amazon EMR 中的引导失败错误代码
<a name="emr-troubleshoot-error-errordetail-bootstrap"></a>

以下各节提供引导失败错误代码的问题排查信息。

**Topics**
+ [BOOTSTRAP\$1FAILURE\$1PRIMARY\$1WITH\$1NON\$1ZERO\$1CODE](BOOTSTRAP_FAILURE_PRIMARY_WITH_NON_ZERO_CODE.md)
+ [BOOTSTRAP\$1FAILURE\$1BA\$1DOWNLOAD\$1FAILED\$1PRIMARY](BOOTSTRAP_FAILURE_BA_DOWNLOAD_FAILED_PRIMARY.md)
+ [BOOTSTRAP\$1FAILURE\$1FILE\$1NOT\$1FOUND\$1PRIMARY](BOOTSTRAP_FAILURE_FILE_NOT_FOUND_PRIMARY.md)
+ [BOOTSTRAP\$1FAILURE\$1INSUFFICIENT\$1DISK\$1SPACE\$1PRIMARY](BOOTSTRAP_FAILURE_INSUFFICIENT_DISK_SPACE_PRIMARY.md)
+ [BOOTSTRAP\$1FAILURE\$1INSUFFICIENT\$1DISK\$1SPACE\$1WORKER](BOOTSTRAP_FAILURE_INSUFFICIENT_DISK_SPACE_WORKER.md)
+ [BOOTSTRAP\$1FAILURE\$1HIVE\$1METASTORE\$1CONNECTION\$1ERROR\$1PRIMARY](BOOTSTRAP_FAILURE_HIVE_METASTORE_CONNECTION_ERROR_PRIMARY.md)
+ [BOOTSTRAP\$1FAILURE\$1HIVE\$1METASTORE\$1CONNECTION\$1ERROR\$1WORKER](BOOTSTRAP_FAILURE_HIVE_METASTORE_CONNECTION_ERROR_WORKER.md)

# BOOTSTRAP\$1FAILURE\$1PRIMARY\$1WITH\$1NON\$1ZERO\$1CODE
<a name="BOOTSTRAP_FAILURE_PRIMARY_WITH_NON_ZERO_CODE"></a>

## 概述
<a name="BOOTSTRAP_FAILURE_BA_DOWNLOAD_FAILED_WITH_NON_ZERO_CODE_overview"></a>

当集群因 `BOOTSTRAP_FAILURE_PRIMARY_WITH_NON_ZERO_CODE` 错误而终止时，主实例中的引导操作已失败。有关引导操作的更多信息，请参阅 [创建引导操作以使用 Amazon EMR 集群安装其他软件](emr-plan-bootstrap.md)。

## 解决方案
<a name="BOOTSTRAP_FAILURE_BA_DOWNLOAD_FAILED_WITH_NON_ZERO_CODE_resolution"></a>

要解决此错误，请查看 API 错误中返回的详细信息、修改您的引导操作脚本，然后使用更新的引导操作创建新集群。

要对出现故障的 EMR 集群进行故障排除，请参阅和返回`ErrorDetail`的信息。`DescribeCluster` `ListClusters` APIs有关更多信息，请参阅 [Amazon EMR 中包含 ErrorDetail 信息的错误代码](emr-troubleshoot-error-errordetail.md)。`ErrorDetail` 中的 `ErrorData` 数组返回此错误代码的以下信息：

**`primary-instance-id`**  
引导操作失败的主实例的 ID。

**`bootstrap-action`**  
失败的引导操作的序号。`bootstrap-action` 值为 `1` 的脚本是在实例上运行的第一个引导操作。

**`return-code`**  
失败的引导操作返回码。

**`amazon-s3-path`**  
失败的引导操作的 Amazon S3 位置。

**`public-doc`**  
错误代码文档的公有 URL。

## 完成步骤
<a name="BOOTSTRAP_FAILURE_BA_DOWNLOAD_FAILED_WITH_NON_ZERO_CODE_stc"></a>

执行以下步骤以确定和修复引导操作错误的根本原因。然后启动新集群。

1. 查看 Amazon S3 中的引导操作日志文件，确定失败的根本原因。要了解有关如何查看 Amazon EMR 日志的更多信息，请参阅 [查看 Amazon EMR 日志文件](emr-manage-view-web-log-files.md)。

1. 如果您在创建实例时开启了集群日志，请参阅 `stdout` 日志以了解更多信息。您可以在以下 Amazon S3 位置找到引导操作的 `stdout` 日志：

   ```
   s3://amzn-s3-demo-bucket/logs/Your_Cluster_Id/node/Primary_Instance_Id/bootstrap-actions/Failed_Bootstrap_Action_Number/stdout.gz 
   ```

   有关集群的更多信息，请参阅 [配置 Amazon EMR 集群日志记录和调试](emr-plan-debugging.md)。

1. 要确定引导操作失败，请查看 `stdout` 日志中的异常以及 `ErrorData` 中的`return-code` 值。

1. 使用上一步中的发现来修改您的引导操作，使其避免异常或在异常发生时可以正常地处理异常。

1. 使用更新的引导操作启动新集群。

# BOOTSTRAP\$1FAILURE\$1BA\$1DOWNLOAD\$1FAILED\$1PRIMARY
<a name="BOOTSTRAP_FAILURE_BA_DOWNLOAD_FAILED_PRIMARY"></a>

## 概述
<a name="BOOTSTRAP_FAILURE_BA_DOWNLOAD_FAILED_PRIMARY_overview"></a>

当主实例无法从您指定的 Amazon S3 位置下载引导操作脚本时，集群终止并出现 `BOOTSTRAP_FAILURE_BA_DOWNLOAD_FAILED_PRIMARY` 错误。典型的原因包括：
+ 引导操作脚本文件不在指定的 Amazon S3 位置。
+ 集群上的 Amazon EC2 实例的服务角色（也称为 *Amazon EMR 的 EC2 实例配置文件*）无权访问引导操作脚本所在的 Amazon S3 存储桶。有关服务角色的更多信息，请参阅 [集群 EC2 实例（EC2 实例配置文件）的服务角色](emr-iam-role-for-ec2.md)。

有关引导操作的更多信息，请参阅 [创建引导操作以使用 Amazon EMR 集群安装其他软件](emr-plan-bootstrap.md)。

## 解决方案
<a name="BOOTSTRAP_FAILURE_BA_DOWNLOAD_FAILED_PRIMARY_resolution"></a>

要解决此错误，请确保您的主实例具有对引导操作脚本的适当访问权限。

要对出现故障的 EMR 集群进行故障排除，请参阅和返回`ErrorDetail`的信息。`DescribeCluster` `ListClusters` APIs有关更多信息，请参阅 [Amazon EMR 中包含 ErrorDetail 信息的错误代码](emr-troubleshoot-error-errordetail.md)。`ErrorDetail` 中的 `ErrorData` 数组返回此错误代码的以下信息：

**`primary-instance-id`**  
引导操作失败的主实例的 ID。

**`bootstrap-action`**  
失败的引导操作的序号。`bootstrap-action` 值为 `1` 的脚本是在实例上运行的第一个引导操作。

**`amazon-s3-path`**  
失败的引导操作的 Amazon S3 位置。

**`public-doc`**  
错误代码文档的公有 URL。

## 完成步骤
<a name="BOOTSTRAP_FAILURE_BA_DOWNLOAD_FAILED_PRIMARY_stc"></a>

执行以下步骤以确定和修复引导操作错误的根本原因。然后启动新集群。

**故障排除步骤**

1. 使用 `ErrorData` 数组中的 `amazon-s3-path` 值在 Amazon S3 中查找相关的引导操作脚本。

1. 如果您在创建实例时开启了集群日志，请参阅 `stdout` 日志以了解更多信息。您可以在以下 Amazon S3 位置找到引导操作的 `stdout` 日志：

   ```
   s3://amzn-s3-demo-bucket/logs/Your_Cluster_Id/node/Primary_Instance_Id/bootstrap-actions/Failed_Bootstrap_Action_Number/stdout.gz 
   ```

   有关集群的更多信息，请参阅 [配置 Amazon EMR 集群日志记录和调试](emr-plan-debugging.md)。

1. 要确定引导操作失败，请查看 `stdout` 日志中的异常以及 `ErrorData` 中的`return-code` 值。

1. 使用上一步中的发现来修改您的引导操作，使其避免异常或在异常发生时可以正常地处理异常。

1. 使用更新的引导操作启动新集群。

# BOOTSTRAP\$1FAILURE\$1FILE\$1NOT\$1FOUND\$1PRIMARY
<a name="BOOTSTRAP_FAILURE_FILE_NOT_FOUND_PRIMARY"></a>

## 概述
<a name="BOOTSTRAP_FAILURE_FILE_NOT_FOUND_PRIMARY_overview"></a>

该 `BOOTSTRAP_FAILURE_FILE_NOT_FOUND_PRIMARY` 错误表示主实例找不到该实例刚刚从指定的 Amazon S3 存储桶下载的引导操作脚本。

## 解决方案
<a name="BOOTSTRAP_FAILURE_FILE_NOT_FOUND_PRIMARY_resolution"></a>

要解决此错误，请确保您的主实例具有对引导操作脚本的适当访问权限。

要对出现故障的 EMR 集群进行故障排除，请参阅和返回`ErrorDetail`的信息。`DescribeCluster` `ListClusters` APIs有关更多信息，请参阅 [Amazon EMR 中包含 ErrorDetail 信息的错误代码](emr-troubleshoot-error-errordetail.md)。`ErrorDetail` 中的 `ErrorData` 数组返回此错误代码的以下信息：

**`primary-instance-id`**  
引导操作失败的主实例的 ID。

**`bootstrap-action`**  
失败的引导操作的序号。`bootstrap-action` 值为 `1` 的脚本是在实例上运行的第一个引导操作。

**`amazon-s3-path`**  
失败的引导操作的 Amazon S3 位置。

**`public-doc`**  
错误代码文档的公有 URL。

## 完成步骤
<a name="BOOTSTRAP_FAILURE_FILE_NOT_FOUND_PRIMARY_stc"></a>

执行以下步骤以确定和修复引导操作错误的根本原因。然后启动新集群。

1. 要在 Amazon S3 中查找相关的引导操作脚本，请使用 `ErrorData` 数组中的 `amazon-s3-path` 值。

1. 查看 Amazon S3 中的引导操作日志文件，确定失败的根本原因。要了解有关如何查看 Amazon EMR 日志的更多信息，请参阅 [查看 Amazon EMR 日志文件](emr-manage-view-web-log-files.md)。
**注意**  
如果您没有为集群开启日志，则必须使用相同的配置和引导操作创建一个新集群。要确保集群日志已开启，请参阅 [配置 Amazon EMR 集群日志记录和调试](emr-plan-debugging.md)。

1. 查看 `stdout` 日志以了解您的引导操作，并确认没有自定义流程可以删除主实例上 `/emr/instance-controller/lib/bootstrap-actions` 文件夹中的文件。您可以在以下 Amazon S3 位置找到引导操作的 `stdout` 日志：

   ```
   s3://amzn-s3-demo-bucket/logs/Your_Cluster_Id/node/Primary_Instance_Id/bootstrap-actions/Failed_Bootstrap_Action_Number/stdout.gz
   ```

1. 使用更新的引导操作启动新集群。

# BOOTSTRAP\$1FAILURE\$1INSUFFICIENT\$1DISK\$1SPACE\$1PRIMARY
<a name="BOOTSTRAP_FAILURE_INSUFFICIENT_DISK_SPACE_PRIMARY"></a>

## 概述
<a name="BOOTSTRAP_FAILURE_INSUFFICIENT_DISK_SPACE_PRIMARY_overview"></a>

 `BOOTSTRAP_FAILURE_INSUFFICIENT_DISK_SPACE_PRIMARY` 错误表明在安装必要的软件时，主实例的磁盘空间不足。

## 解决方案
<a name="BOOTSTRAP_FAILURE_INSUFFICIENT_DISK_SPACE_PRIMARY_resolution"></a>

 要解决此错误，请确认您的主实例的根卷上有足够的磁盘空间。

要对出现故障的 EMR 集群进行故障排除，请参阅和返回`ErrorDetail`的信息。`DescribeCluster` `ListClusters` APIs有关更多信息，请参阅 [Amazon EMR 中包含 ErrorDetail 信息的错误代码](emr-troubleshoot-error-errordetail.md)。`ErrorDetail` 中的 `ErrorData` 数组返回此错误代码的以下信息：

**`primary-instance-id`**  
磁盘空间不足的主实例的 ID。

**`public-doc`**  
错误代码文档的公有 URL。

## 完成步骤
<a name="BOOTSTRAP_FAILURE_INSUFFICIENT_DISK_SPACE_PRIMARY_stc"></a>

1.  查看集群的 EBS 根设备卷的最佳实践。请参阅《Amazon EMR Management Guide》**中的 [自定义 Amazon EBS 根设备卷](emr-custom-ami-root-volume-size.md)。

1. 启动一个具有更大 EBS 根设备卷大小的新集群。

# BOOTSTRAP\$1FAILURE\$1INSUFFICIENT\$1DISK\$1SPACE\$1WORKER
<a name="BOOTSTRAP_FAILURE_INSUFFICIENT_DISK_SPACE_WORKER"></a>

## 概述
<a name="BOOTSTRAP_FAILURE_INSUFFICIENT_DISK_SPACE_WORKER_overview"></a>

 `BOOTSTRAP_FAILURE_INSUFFICIENT_DISK_SPACE_WORKER` 错误表明在安装必要的软件时，一个或多个工作线程实例的磁盘空间不足。

## 解决方案
<a name="BOOTSTRAP_FAILURE_INSUFFICIENT_DISK_SPACE_WORKER_resolution"></a>

 要解决此错误，请确认您的工作线程实例的根卷上有足够的磁盘空间。

要对出现故障的 EMR 集群进行故障排除，请参阅和返回`ErrorDetail`的信息。`DescribeCluster` `ListClusters` APIs有关更多信息，请参阅 [Amazon EMR 中包含 ErrorDetail 信息的错误代码](emr-troubleshoot-error-errordetail.md)。`ErrorDetail` 中的 `ErrorData` 数组返回此错误代码的以下信息：

**`worker-instance-ids`**  
磁盘空间不足的工作器实例中的。 IDs 

**`public-doc`**  
错误代码文档的公有 URL。

## 完成步骤
<a name="BOOTSTRAP_FAILURE_INSUFFICIENT_DISK_SPACE_WORKER_stc"></a>

1.  查看集群的 EBS 根设备卷的最佳实践。请参阅《Amazon EMR Management Guide》**中的 [自定义 Amazon EBS 根设备卷](emr-custom-ami-root-volume-size.md)。

1. 启动一个具有更大 EBS 根设备卷大小的新集群。

# BOOTSTRAP\$1FAILURE\$1HIVE\$1METASTORE\$1CONNECTION\$1ERROR\$1PRIMARY
<a name="BOOTSTRAP_FAILURE_HIVE_METASTORE_CONNECTION_ERROR_PRIMARY"></a>

## 概述
<a name="BOOTSTRAP_FAILURE_HIVE_METASTORE_CONNECTION_ERROR_PRIMARY_overview"></a>

 `BOOTSTRAP_FAILURE_HIVE_METASTORE_CONNECTION_ERROR_PRIMARY` 错误表示主实例无法与配置的外部 Hive 元存储建立连接。

## 解决方案
<a name="BOOTSTRAP_FAILURE_HIVE_METASTORE_CONNECTION_ERROR_PRIMARY_resolution"></a>

 要解决此错误，请确保您的外部 Hive 元存储配置正确，并且允许主实例与其连接。

要对出现故障的 EMR 集群进行故障排除，请参阅和返回`ErrorDetail`的信息。`DescribeCluster` `ListClusters` APIs有关更多信息，请参阅 [Amazon EMR 中包含 ErrorDetail 信息的错误代码](emr-troubleshoot-error-errordetail.md)。`ErrorDetail` 中的 `ErrorData` 数组返回此错误代码的以下信息：

**`primary-instance-id`**  
无法与配置的外部 Hive 元存储建立连接的主实例的 ID。

**`public-doc`**  
错误代码文档的公有 URL。

## 完成步骤
<a name="BOOTSTRAP_FAILURE_HIVE_METASTORE_CONNECTION_ERROR_PRIMARY_stc"></a>

1.  查看为 Hive 配置外部元存储的最佳实践。请参阅[为 Hive 配置外部元存储](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-metastore-external-hive.html)。

1. 使用更新的集群配置启动新集群。

# BOOTSTRAP\$1FAILURE\$1HIVE\$1METASTORE\$1CONNECTION\$1ERROR\$1WORKER
<a name="BOOTSTRAP_FAILURE_HIVE_METASTORE_CONNECTION_ERROR_WORKER"></a>

## 概述
<a name="BOOTSTRAP_FAILURE_HIVE_METASTORE_CONNECTION_ERROR_WORKER_overview"></a>

 `BOOTSTRAP_FAILURE_HIVE_METASTORE_CONNECTION_ERROR_WORKER` 错误表示一个或多个工作线程实例无法与配置的外部 Hive 元存储建立连接。

## 解决方案
<a name="BOOTSTRAP_FAILURE_HIVE_METASTORE_CONNECTION_ERROR_WORKER_resolution"></a>

 要解决此错误，请确保您的外部 Hive 元存储配置正确，并且允许工作线程实例与其连接。

要对出现故障的 EMR 集群进行故障排除，请参阅和返回`ErrorDetail`的信息。`DescribeCluster` `ListClusters` APIs有关更多信息，请参阅 [Amazon EMR 中包含 ErrorDetail 信息的错误代码](emr-troubleshoot-error-errordetail.md)。`ErrorDetail` 中的 `ErrorData` 数组返回此错误代码的以下信息：

**`worker-instance-ids`**  
无法与配置 IDs 的外部 Hive Metastore 建立连接的工作器实例。

**`public-doc`**  
错误代码文档的公有 URL。

## 完成步骤
<a name="BOOTSTRAP_FAILURE_HIVE_METASTORE_CONNECTION_ERROR_WORKER_stc"></a>

1.  查看为 Hive 配置外部元存储的最佳实践。请参阅[为 Hive 配置外部元存储](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-metastore-external-hive.html)。

1. 使用更新的集群配置启动新集群。

# Amazon EMR 的内部错误代码
<a name="emr-troubleshoot-error-errordetail-internal"></a>

以下部分提供了内部错误代码的问题排查信息，包括容量不足或无容量的代码。

**Topics**
+ [INTERNAL\$1ERROR\$1 \$1 EC2 CAPACITY\$1AZ 不足](INTERNAL_ERROR_EC2_INSUFFICIENT_CAPACITY_AZ.md)
+ [INTERNAL\$1ERROR\$1SPOT\$1PRICE\$1INCREASE\$1PRIMARY](INTERNAL_ERROR_SPOT_PRICE_INCREASE_PRIMARY.md)
+ [INTERNAL\$1ERROR\$1SPOT\$1NO\$1CAPACITY\$1PRIMARY](INTERNAL_ERROR_SPOT_NO_CAPACITY_PRIMARY.md)

# INTERNAL\$1ERROR\$1 \$1 EC2 CAPACITY\$1AZ 不足
<a name="INTERNAL_ERROR_EC2_INSUFFICIENT_CAPACITY_AZ"></a>

## 概述
<a name="INTERNAL_ERROR_EC2_INSUFFICIENT_CAPACITY_AZ_overview"></a>

当所选可用区没有足够的容量来满足您的 Amazon EC2 实例类型请求时，集群会终止并出现 `INTERNAL_ERROR_EC2_INSUFFICIENT_CAPACITY_AZ` 错误。为集群选择的子网决定可用区。有关 Amazon EMR 的子网的更多信息，请参阅 [在 VPC 中为 Amazon EMR 配置联网](emr-plan-vpc-subnet.md)。

## 解决方案
<a name="INTERNAL_ERROR_EC2_INSUFFICIENT_CAPACITY_AZ_resolution"></a>

要解决此错误，请修改您的实例类型配置并使用更新后的请求创建一个新集群。

要对出现故障的 EMR 集群进行故障排除，请参阅和返回`ErrorDetail`的信息。`DescribeCluster` `ListClusters` APIs有关更多信息，请参阅 [Amazon EMR 中包含 ErrorDetail 信息的错误代码](emr-troubleshoot-error-errordetail.md)。`ErrorDetail` 中的 `ErrorData` 数组返回此错误代码的以下信息：

**`instance-type`**  
容量不足的实例类型。

**`availability-zone`**  
您的子网解析到的可用区。

**`public-doc`**  
错误代码文档的公有 URL。

## 完成步骤
<a name="INTERNAL_ERROR_EC2_INSUFFICIENT_CAPACITY_AZ_stc"></a>

执行以下步骤以确定和修复集群配置错误的根本原因。
+ 查看集群配置的最佳实践。请参阅《Amazon EMR Management Guide》**中的 [为竞价型实例配置 Amazon EMR 集群实例类型和最佳实践](emr-plan-instances-guidelines.md)。
+ 排查启动问题并检查您的配置。请参阅《Amazon EC2 用户指南》**中的[排查实例启动问题](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/troubleshooting-launch.html)。
+ 使用更新的集群配置启动新集群。

# INTERNAL\$1ERROR\$1SPOT\$1PRICE\$1INCREASE\$1PRIMARY
<a name="INTERNAL_ERROR_SPOT_PRICE_INCREASE_PRIMARY"></a>

## 概述
<a name="INTERNAL_ERROR_SPOT_PRICE_INCREASE_PRIMARY_overview"></a>

当 Amazon EMR 由于实例不可用等于或低于您的最高竞价型价格而无法满足您对主节点的竞价型实例请求时，集群会终止并出现 `INTERNAL_ERROR_SPOT_PRICE_INCREASE_PRIMARY` 错误，。有关更多信息，请参阅 *Amazon EC2 用户指南*中的[竞价型实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances.html)。

## 解决方案
<a name="INTERNAL_ERROR_SPOT_PRICE_INCREASE_PRIMARY_resolution"></a>

要解决此错误，请为集群指定在目标价格范围内的实例类型，或者提高相同实例类型的价格限制。

要对出现故障的 EMR 集群进行故障排除，请参阅和返回`ErrorDetail`的信息。`DescribeCluster` `ListClusters` APIs有关更多信息，请参阅 [Amazon EMR 中包含 ErrorDetail 信息的错误代码](emr-troubleshoot-error-errordetail.md)。`ErrorDetail` 中的 `ErrorData` 数组返回此错误代码的以下信息：

**`primary-instance-id`**  
失败集群的主实例的 ID。

**`instance-type`**  
容量不足的实例类型。

**`availability-zone`**  
您的子网所在的可用区。

**`public-doc`**  
错误代码文档的公有 URL。

## 完成步骤
<a name="INTERNAL_ERROR_SPOT_PRICE_INCREASE_PRIMARY_stc"></a>

执行以下步骤排查集群配置策略的问题，然后启动新集群：

1. 查看 Amazon EC2 竞价型实例的最佳实践，并查看您的集群配置策略。有关更多信息，请参阅《Amazon EC2 用户指南》**和 [为竞价型实例配置 Amazon EMR 集群实例类型和最佳实践](emr-plan-instances-guidelines.md) 中的 [EC2 竞价型实例最佳实践](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-best-practices.html)。

1. 请修改您的实例类型配置或可用区，并使用更新后的请求创建一个新集群。

1. 如果问题仍然存在，请为主实例使用按需容量。

# INTERNAL\$1ERROR\$1SPOT\$1NO\$1CAPACITY\$1PRIMARY
<a name="INTERNAL_ERROR_SPOT_NO_CAPACITY_PRIMARY"></a>

## 概述
<a name="INTERNAL_ERROR_SPOT_NO_CAPACITY_PRIMARY_overview"></a>

当没有足够的容量来满足主节点的竞价型实例请求时，集群会终止并出现 `INTERNAL_ERROR_SPOT_NO_CAPACITY_PRIMARY` 错误。有关更多信息，请参阅 *Amazon EC2 用户指南*中的[竞价型实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances.html)。

## 解决方案
<a name="INTERNAL_ERROR_SPOT_NO_CAPACITY_PRIMARY_resolution"></a>

要解决此错误，请为集群指定在目标价格范围内的实例类型，或者提高相同实例类型的价格限制。

要对出现故障的 EMR 集群进行故障排除，请参阅和返回`ErrorDetail`的信息。`DescribeCluster` `ListClusters` APIs有关更多信息，请参阅 [Amazon EMR 中包含 ErrorDetail 信息的错误代码](emr-troubleshoot-error-errordetail.md)。`ErrorDetail` 中的 `ErrorData` 数组返回此错误代码的以下信息：

**`primary-instance-id`**  
失败集群的主实例的 ID。

**`instance-type`**  
容量不足的实例类型。

**`availability-zone`**  
您的子网解析到的可用区。

**`public-doc`**  
错误代码文档的公有 URL。

## 完成步骤
<a name="INTERNAL_ERROR_SPOT_NO_CAPACITY_PRIMARY_stc"></a>

执行以下步骤排查集群配置策略的问题，然后启动新集群：

1. 查看 Amazon EC2 竞价型实例的最佳实践，并查看您的集群配置策略。有关更多信息，请参阅《Amazon EC2 用户指南》**和 [为竞价型实例配置 Amazon EMR 集群实例类型和最佳实践](emr-plan-instances-guidelines.md) 中的 [EC2 竞价型实例最佳实践](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-best-practices.html)。

1. 请修改您的实例类型配置，并使用更新后的请求创建一个新集群。

1. 如果问题仍然存在，请为主实例使用按需容量。

# Amazon EMR 中的验证失败错误代码
<a name="emr-troubleshoot-error-errordetail-validation"></a>

以下各节提供验证失败错误代码的问题排查信息。

**Topics**
+ [VALIDATION\$1ERROR\$1SUBNET\$1NOT\$1FROM\$1ONE\$1VPC](VALIDATION_ERROR_SUBNET_NOT_FROM_ONE_VPC.md)
+ [VALIDATION\$1ERROR\$1SECURITY\$1GROUP\$1NOT\$1FROM\$1ONE\$1VPC](VALIDATION_ERROR_SECURITY_GROUP_NOT_FROM_ONE_VPC.md)
+ [VALIDATION\$1ERROR\$1INVALID\$1SSH\$1KEY\$1NAME](VALIDATION_ERROR_INVALID_SSH_KEY_NAME.md)
+ [VALIDATION\$1ERROR\$1INSTANCE\$1TYPE\$1NOT\$1SUPPORTED](VALIDATION_ERROR_INSTANCE_TYPE_NOT_SUPPORTED.md)

# VALIDATION\$1ERROR\$1SUBNET\$1NOT\$1FROM\$1ONE\$1VPC
<a name="VALIDATION_ERROR_SUBNET_NOT_FROM_ONE_VPC"></a>

## 概述
<a name="VALIDATION_ERROR_SUBNET_NOT_FROM_ONE_VPC_overview"></a>

当您的集群和您为集群引用的子网属于不同的虚拟私有云 (VPCs) 时，集群将因错误而终止。`VALIDATION_ERROR_SUBNET_NOT_FROM_ONE_VPC`您可以使用 Amazon EMR 在 VPC 中跨子网启动具有实例集配置的集群。有关实例集的更多信息，请参阅《Amazon EMR Management Guide》**中的 [规划和配置 Amazon EMR 集群的实例集](emr-instance-fleet.md)。

## 解决方案
<a name="VALIDATION_ERROR_SUBNET_NOT_FROM_ONE_VPC_resolution"></a>

要解决此错误，请使用与集群属于同一 VPC 的子网。

要对出现故障的 EMR 集群进行故障排除，请参阅和返回`ErrorDetail`的信息。`DescribeCluster` `ListClusters` APIs有关更多信息，请参阅 [Amazon EMR 中包含 ErrorDetail 信息的错误代码](emr-troubleshoot-error-errordetail.md)。`ErrorDetail` 中的 `ErrorData` 数组返回此错误代码的以下信息：

**`vpc`**  
对于每个 子网:VPC 对，返回该子网所属的 VPC ID。

**`subnet`**  
对于每个 子网:VPC 对，返回该子网的 ID。

**`public-doc`**  
错误代码文档的公有 URL。

## 完成步骤
<a name="VALIDATION_ERROR_SUBNET_NOT_FROM_ONE_VPC_stc"></a>

执行以下步骤来识别和修复错误：

1. 查看`ErrorData`阵列中列 IDs 出的子网，确认它们属于您要启动 EMR 集群的 VPC。

1. 修改您的子网配置。您可以使用以下方法之一查找 VPC 中所有可用的公有和私有子网。
   + 导航到 Amazon VPC 控制台。选择 **Subnet** s，然后列出您的集群中驻留的所有子网。 AWS 区域 要仅查找公有子网或私有子网，请应用**自动分配公有 IPv4 地址过滤器**。要在您的集群使用的 VPC 中查找和选择子网，请使用**按 VPC 筛选**选项。有关如何创建子网的更多信息，请参阅《Amazon Virtual Private Cloud 用户指南》**中的[创建子网](https://docs.aws.amazon.com/vpc/latest/userguide/create-subnets.html)。
   + 使用 AWS CLI 查找您的集群使用的 VPC 中所有可用的公有和私有子网。有关更多信息，请参阅 [describe-subnets](https://amazonaws.com/ec2/describe-subnets.html) API。要在 VPC 中创建新的子网，请参阅 [create-subnet](https://amazonaws.com/ec2/create-subnet.html) API。

1. 启动一个新集群，其子网与集群属于同一 VPC。

# VALIDATION\$1ERROR\$1SECURITY\$1GROUP\$1NOT\$1FROM\$1ONE\$1VPC
<a name="VALIDATION_ERROR_SECURITY_GROUP_NOT_FROM_ONE_VPC"></a>

## 概述
<a name="VALIDATION_ERROR_SECURITY_GROUP_NOT_FROM_ONE_VPC_overview"></a>

当您的集群和分配给集群的安全组属于不同的虚拟私有云 (VPCs) 时，集群将因`VALIDATION_ERROR_SECURITY_GROUP_NOT_FROM_ONE_VPC`错误而终止。有关安全组的更多信息，请参阅 [指定 Amazon EMR 托管的安全组和其它安全组](emr-sg-specify.md) 和 [使用 Amazon EMR 集群的安全组控制网络流量](emr-security-groups.md)。

## 解决方案
<a name="VALIDATION_ERROR_SECURITY_GROUP_NOT_FROM_ONE_VPC_resolution"></a>

要解决此错误，请使用与集群属于同一 VPC 的安全组。

要对出现故障的 EMR 集群进行故障排除，请参阅和返回`ErrorDetail`的信息。`DescribeCluster` `ListClusters` APIs有关更多信息，请参阅 [Amazon EMR 中包含 ErrorDetail 信息的错误代码](emr-troubleshoot-error-errordetail.md)。`ErrorDetail` 中的 `ErrorData` 数组返回此错误代码的以下信息：

**`vpc`**  
对于每个安全组:VPC 对，返回该安全组所属的 VPC 的 ID。

**`security-group`**  
对于每个安全组:VPC 对，返回该安全组的 ID。

**`public-doc`**  
错误代码文档的公有 URL。

## 完成步骤
<a name="VALIDATION_ERROR_SECURITY_GROUP_NOT_FROM_ONE_VPC_stc"></a>

执行以下步骤来识别和修复错误：

1. 查看`ErrorData`阵列中列出的安全组 IDs ，确认它们属于您要启动 EMR 集群的 VPC。

1. 导航到 Amazon VPC 控制台。选择**安全组**以列出所选区域内的所有安全组。在与您的集群相同的 VPC 中找到安全组，然后修改您的安全组配置。

1. 启动一个新集群，其安全组与集群属于同一 VPC。

# VALIDATION\$1ERROR\$1INVALID\$1SSH\$1KEY\$1NAME
<a name="VALIDATION_ERROR_INVALID_SSH_KEY_NAME"></a>

## 概述
<a name="VALIDATION_ERROR_INVALID_SSH_KEY_NAME_overview"></a>

当您使用无法通过 SSH 连接到主实例的 Amazon EC2 密钥对时，集群会终止并出现 `VALIDATION_ERROR_INVALID_SSH_KEY_NAME` 错误。密钥对名称可能不正确，或者请求的密钥对中可能不存在 AWS 区域。有关密钥对的更多信息，请参阅《Amazon EC2 用户指南》**中的 [Amazon EC2 密钥对和 Linux 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)。

## 解决方案
<a name="VALIDATION_ERROR_INVALID_SSH_KEY_NAME_resolution"></a>

要解决此错误，请使用有效的 SSH 密钥对名称创建一个新集群。

要对出现故障的 EMR 集群进行故障排除，请参阅和返回`ErrorDetail`的信息。`DescribeCluster` `ListClusters` APIs有关更多信息，请参阅 [Amazon EMR 中包含 ErrorDetail 信息的错误代码](emr-troubleshoot-error-errordetail.md)。`ErrorDetail` 中的 `ErrorData` 数组返回此错误代码的以下信息：

**`ssh-key`**  
您在创建集群时提供的 SSH 密钥对名称。

**`public-doc`**  
错误代码文档的公有 URL。

## 完成步骤
<a name="VALIDATION_ERROR_INVALID_SSH_KEY_NAME_stc"></a>

执行以下步骤来识别和修复错误：

1. 检查您的 *keypair* .pem 文件并确认它与您在 Amazon EMR 控制台中看到的 SSH 密钥的名称相匹配。

1. 导航到 Amazon EC2 控制台。确认您使用的 SSH 密钥名称在您的集群 AWS 区域 使用的中可用。您可以在顶部的账户 ID AWS 区域 旁边找到您的账户 ID AWS 管理控制台。

1. 使用有效 SSH 密钥名称启动新集群。

# VALIDATION\$1ERROR\$1INSTANCE\$1TYPE\$1NOT\$1SUPPORTED
<a name="VALIDATION_ERROR_INSTANCE_TYPE_NOT_SUPPORTED"></a>

## 概述
<a name="VALIDATION_ERROR_INSTANCE_TYPE_NOT_SUPPORTED_overview"></a>

如果您的集群的 AWS 区域 和可用区不支持一个或多个实例组的指定实例类型，则集群会终止并出现 `VALIDATION_ERROR_INSTANCE_TYPE_NOT_SUPPORTED` 错误。Amazon EMR 可能支持区域内一个可用区中的某个实例类型，但不支持另一个可用区中的实例类型。您为集群选择的子网决定了区域内的可用区。如需了解 Amazon EMR 支持的实例类型和区域，请参阅 [Amazon EMR 支持的实例类型](emr-supported-instance-types.md)。

## 解决方案
<a name="VALIDATION_ERROR_INSTANCE_TYPE_NOT_SUPPORTED_resolution"></a>

要解决此错误，请在您请求集群的区域和可用区中指定 Amazon EMR 支持的集群实例类型。

要对出现故障的 EMR 集群进行故障排除，请参阅和返回`ErrorDetail`的信息。`DescribeCluster` `ListClusters` APIs有关更多信息，请参阅 [Amazon EMR 中包含 ErrorDetail 信息的错误代码](emr-troubleshoot-error-errordetail.md)。`ErrorDetail` 中的 `ErrorData` 数组返回此错误代码的以下信息：

**`instance-types`**  
不支持的实例类型列表。

**`availability-zones`**  
您的子网解析到的可用区列表。

**`public-doc`**  
错误代码文档的公有 URL。

## 完成步骤
<a name="VALIDATION_ERROR_INSTANCE_TYPE_NOT_SUPPORTED_stc"></a>

执行以下步骤来识别和修复错误：

1.  AWS CLI 使用检索可用区中的可用实例类型。为此，您可以使用`[ec2 describe-instance-type-offerings](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-type-offerings.html)`命令按位置（AWS 区域 或可用区）筛选可用的实例类型。例如，以下命令返回指定可用区 `us-east-2a` 中提供的实例类型。

   ```
   aws ec2 describe-instance-type-offerings --location-type "availability-zone" --filters Name=location,Values=us-east-2a --region us-east-2 --query "InstanceTypeOfferings[*].[InstanceType]" --output text | sort
   ```

   要了解有关如何发现可用实例类型的更多信息，请参阅[查找 Amazon EC2 实例类型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-discovery.html)。

1. 确定与集群的相同区域和可用区中可用的实例类型后，请选择以下解决方案之一继续：

   1. 在您所选的实例类型可用且受 Amazon EMR 支持的可用区中，创建新集群并为该集群选择子网。

   1. 在与集群失败的相同区域和 Amazon EC2 子网中创建一个新集群，但使用在该位置受 Amazon EMR 支持的实例类型。

如需了解 Amazon EMR 支持的实例类型和区域，请参阅 [Amazon EMR 支持的实例类型](emr-supported-instance-types.md)。要比较实例类型的功能，请参阅 [Amazon EC2 实例类型](https://aws.amazon.com/ec2/instance-types)。

# Amazon EMR 集群操作期间的资源错误
<a name="emr-troubleshoot-error-resource"></a>

以下错误通常是由集群上受限制的资源导致的。本指南描述了每个错误并提供了问题排查帮助。

**Topics**
+ [Amazon EMR 集群终止并显示 NO\$1SLAVE\$1LEFT，核心节点为 FAILED\$1BY\$1MASTER](emr-cluster-NO_SLAVE_LEFT-FAILED_BY_MASTER.md)
+ [Amazon EMR 集群错误：Cannot replicate block, only managed to replicate to zero nodes.](enough-hdfs-space.md)
+ [Amazon EMR 集群错误：EC2 QUOTA EXCEEDED](emr-EC2.md)
+ [Amazon EMR 集群错误：Too many fetch-failures](emr-troubleshoot-error-resource-1.md)
+ [Amazon EMR 集群错误：File could only be replicated to 0 nodes instead of 1](emr-troubleshoot-error-resource-2.md)
+ [Amazon EMR 集群错误：Deny-listed nodes](emr-troubleshoot-error-resource-3.md)
+ [Amazon EMR 集群节流错误](emr-throttling-error.md)
+ [Amazon EMR 集群错误：Instance type not supported](emr-INSTANCE_TYPE_NOT_SUPPORTED-error.md)
+ [Amazon EMR 集群错误：EC2 is out of capacity](emr-EC2_INSUFFICIENT_CAPACITY-error.md)
+ [Amazon EMR 集群错误：HDFS replication factor error](emr-hdfs-insufficient-replication.md)
+ [Amazon EMR 集群错误：HDFS insufficient space error](emr-hdfs-insufficient-space.md)

# Amazon EMR 集群终止并显示 NO\$1SLAVE\$1LEFT，核心节点为 FAILED\$1BY\$1MASTER
<a name="emr-cluster-NO_SLAVE_LEFT-FAILED_BY_MASTER"></a>

通常，发生这一现象是因为禁用了终止保护，而且所有核心节点都超过了 `yarn-site` 配置分类（对应于 `yarn-site.xml` 文件）中最大利用率阈值指定的磁盘存储容量。默认情况下，该值为 90%。当核心节点的磁盘利用率超过利用率阈值时，YARN NodeManager 运行状况服务会将该节点报告为`UNHEALTHY`。如果此节点处于此状态，Amazon EMR 会将此节点列入拒绝名单且不会向其分配 YARN 容器。如果此节点保持不正常状态 45 分钟，则 Amazon EMR 会把要终止的相关 Amazon EC2 实例标记为 `FAILED_BY_MASTER`。当与核心节点关联的所有 Amazon EC2 实例都被标记为终止时，集群将因没有资源用于执行任务而以 `NO_SLAVE_LEFT` 状态终止。

如果一个核心节点超过磁盘利用率，则可能会导致连锁反应。如果单个节点因 HDFS 而超过磁盘利用率阈值，那么其它节点很可能同样会接近阈值。第一个节点超过磁盘利用率阈值时，Amazon EMR 会将其列入拒绝名单。这会增加剩余节点的磁盘利用率负担，因为节点开始在自身之间复制其在已列入拒绝名单的节点上丢失的 HDFS 数据。每个节点随后都会以相同的方式进入 `UNHEALTHY` 状态，并且集群最终会终止。

## 最佳实践和建议
<a name="w2aac36c21c13b7b7"></a>

### 为集群硬件配置充足的存储容量
<a name="w2aac36c21c13b7b7b3"></a>

创建集群时，请确保有足够的核心节点并且每个节点都为 HDFS 提供足够的实例存储空间和 EBS 存储卷。有关更多信息，请参阅[计算集群的必需的 HDFS 容量](emr-plan-instances-guidelines.md#emr-plan-instances-hdfs)。您也可以手动或使用 Auto Scaling 功能，将核心实例添加到现有实例组。新实例与实例组中的其它实例具有相同的存储配置。有关更多信息，请参阅[使用 Amazon EMR 集群扩展来适应不断变化的工作负载](emr-scale-on-demand.md)。

### 启用终止保护
<a name="w2aac36c21c13b7b7b5"></a>

启用终止保护。这样一来，如果核心节点被列入拒绝名单，您可以使用 SSH 连接到关联的 Amazon EC2 实例进行故障排查并恢复数据。如果启用终止保护，请注意，Amazon EMR 不会将该 Amazon EC2 实例替换为新实例。有关更多信息，请参阅 [使用终止保护功能防止 Amazon EMR 集群意外关闭](UsingEMR_TerminationProtection.md)。

### 为 “ MRUnhealthy节点” CloudWatch 指标创建警报
<a name="w2aac36c21c13b7b7b7"></a>

此指标会报告其中报告了 `UNHEALTHY` 状态的节点的数量。此指标等同于 YARN 指标 `mapred.resourcemanager.NoOfUnhealthyNodes`。您可以为此警报设置通知，在节点维持不正常状态到达 45 分钟计时之前提醒您。有关更多信息，请参阅[使用监控 Amazon EMR 指标 CloudWatch](UsingEMR_ViewingMetrics.md)。

### 使用 yarn-site 调整设置
<a name="w2aac36c21c13b7b7b9"></a>

下面的设置可以根据您的应用程序要求进行调整。例如，您可能需要通过提高 `yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage` 的值，来提高节点报告为 `UNHEALTHY` 的磁盘利用率阈值。

在使用 `yarn-site` 配置分类创建集群时，您可以设置这些值。有关更多信息，请参阅《Amazon EMR 版本指南》**中的[配置应用程序](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps.html)。您还可以使用 SSH 连接到与核心节点关联的 Amazon EC2 实例，然后使用文本编辑器在 `/etc/hadoop/conf.empty/yarn-site.xml` 添加值。进行更改后，必须按 hadoop-yarn-nodemanager如下所示重新启动。

**重要**  
当您重新启动 NodeManager 服务时，除非在创建集群时将活动的 YARN 容器设置`yarn.nodemanager.recovery.enabled`为`true`使用`yarn-site`配置分类，否则活动的 YARN 容器将被终止。您还必须使用 `yarn.nodemanager.recovery.dir` 属性指定存储容器状态的目录。

```
sudo /sbin/stop hadoop-yarn-nodemanager
sudo /sbin/start hadoop-yarn-nodemanager
```

有关当前 `yarn-site` 属性和默认值的更多信息，请参阅 Apache Hadoop 文档中的 [YARN 默认设置](http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-common/yarn-default.xml)。


| 属性 | 默认 值 | 说明 | 
| --- | --- | --- | 
|  yarn.nodemanager。 disk-health-checker.interval-ms  |  120000  |  磁盘运行状况检查程序运行的频率（以秒为单位）。  | 
|  yarn.nodemanager。 disk-health-checker。 min-healthy-disks  |  0.25  |  启动新容器时必须处于正常状态的磁盘数量的最小比例。 NodeManager 这对应于 yarn.nodemanager.local-dirs（默认情况下，Amazon EMR 中的 `/mnt/yarn`）和 yarn.nodemanager.log-dirs（默认情况下，为 `/var/log/hadoop-yarn/containers`，与 Amazon EMR 中的 `mnt/var/log/hadoop-yarn/containers` 符号链接）。  | 
|  `yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage`  |  90.0  |  磁盘标记为故障后允许的磁盘空间利用率的最大百分比。值范围是 0.0 到 100.0。如果该值大于或等于 100，则会 NodeManager 检查磁盘是否已满。这适用于 `yarn-nodemanager.local-dirs` 和 `yarn.nodemanager.log-dirs`。  | 
|  `yarn.nodemanager.disk-health-checker.min-free-space-per-disk-mb`  |  0  |  磁盘上可供使用的最小空间。这适用于 `yarn-nodemanager.local-dirs` 和 `yarn.nodemanager.log-dirs`。  | 

# Amazon EMR 集群错误：Cannot replicate block, only managed to replicate to zero nodes.
<a name="enough-hdfs-space"></a>

错误：“Cannot replicate block, only managed to replicate to zero nodes.” 通常在集群没有足够的 HDFS 存储时发生。当您在集群中生成的数据多于 HDFS 中可以存储的数据时，会发生此错误。只有在集群运行时您才会看到此错误，因为当作业结束时，它会释放所使用的 HDFS 空间。

向集群提供的 HDFS 空间量取决于用作核心节点的 Amazon EC2 实例的数量和类型。任务节点不用于 HDFS 存储。每个 Amazon EC2 实例上的所有磁盘空间（包括连接的 EBS 存储卷）均可供 HDFS 使用。有关每种 EC2 实例类型的本地存储量的更多信息，请参阅《Amazon EC2 用户指南》**中的[实例类型和系列](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html)。

另一个会影响可用 HDFS 空间量的因素是重复因子，即为冗余数据存储在 HDFS 中的每个数据块的副本数量。重复因子会随着集群中的节点数量而增加：对于拥有 10 个或更多节点的集群，每个数据块有 3 个副本；对于拥有 4 个至 9 个节点的集群，每个数据块有 2 个副本；对于拥有 3 个或更少节点的集群，每个数据块有 1 个副本 (无冗余)。用 HDFS 的总可用空间除以重复因子。有些情况下，例如将节点数量从 9 增加到 10 时，重复因子的增大实际上会导致 HDFS 的可用空间量下降。

例如，拥有 10 个 m1.large 类型核心节点的集群会向 HDFS 提供 2833 GB 的空间 ((10 节点 X 每个节点 850 GB) /重复因子 3)。

如果您的集群占用空间超过了为 HDFS 提供的空间，您可以向集群添加额外核心节点；或使用数据压缩创建更多 HDFS 空间。如果您的集群可以停止和重启，您可以考虑使用更大 Amazon EC2 实例类型的核心节点。您还可以考虑调整重复因子。然而，应当注意，减小重复因子会降低 HDFS 数据的冗余程度以及集群从丢失或损坏的 HDFS 数据块中恢复的能力。

# Amazon EMR 集群错误：EC2 QUOTA EXCEEDED
<a name="emr-EC2"></a>

如果您收到一条 `EC2 QUOTA EXCEEDED` 消息，可能存在多种原因。根据配置差异，以前的集群可能需要 5-20 分钟的时间才能终止并释放分配的资源。如果您在尝试启动集群时收到 `EC2 QUOTA EXCEEDED` 错误，原因可能是最近终止的集群中的资源尚未释放。此消息也可能是由于将实例组或实例队列的大小调整为大于账户的当前实例配额的目标大小。这可能通过自动扩展手动或自动发生。

请考虑使用以下选项来解决此问题：
+ 按照《Amazon Web Services 一般参考》**中的 [AWS Service Quotas](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html) 中的说明请求提高服务限额。对于某些人来说 APIs，设置 CloudWatch 活动可能比增加限额更好。有关更多详细信息，请参阅[何时在中设置 EMR 事件 CloudWatch](emr-service-limits-cloudwatch-events.md)。
+ 如果一个或多个正在运行的集群未达到容量，请为正在运行的集群调整实例组的大小或降低实例队列上的目标容量。
+ 创建具有较少 EC2 实例或更少目标容量的集群。

# Amazon EMR 集群错误：Too many fetch-failures
<a name="emr-troubleshoot-error-resource-1"></a>

步骤或任务尝试日志中的“**Too many fetch-failures**”或“**Error reading task output**”错误消息表示，正在运行的任务取决于另一任务的输出。当 reduce 任务在队列中等待执行和需要一个或多个映射任务的输出以及系统尚未提供输出时，通常会发生此错误。

有几个原因会导致输出可能不可用：
+ 前提任务仍在处理中。这通常是一个映射任务。
+ 如果数据存储在不同的实例上，那么数据不可用的原因可能是网络连接较差。
+ 如果 HDFS 用于检索输出，那么 HDFS 可能会出现问题。

此错误的最常见原因是之前的任务仍在处理中。如果在 reduce 任务最初尝试运行时发生了此错误，那么极可能是上述原因造成的。您可以通过检查返回此错误的集群步骤的 syslog 日志，确定情况是否如此。如果 syslog 显示了 map-reduce 任务的执行进度，这表明在还有尚未完成的映射任务的同时 reduce 阶段已经开始。

要在日志中寻找的是映射进度百分比，此值会上升到 100% 然后回落到更低值。当映射百分比是 100% 时，这并不意味着所有的映射任务都已完成。它仅仅意味着 Hadoop 正在执行所有映射任务。如果此值降到 100% 以下，则意味着映射任务已失败，然后 Hadoop 可能会根据配置试图重新计划任务。如果日志中的地图百分比保持在 100%，请特别查看 CloudWatch 指标`RunningMapTasks`，以检查地图任务是否仍在处理中。您还可以使用主节点上的 Hadoop Web 界面找到此信息。

如果您看到此问题，那么可以尝试以下几件事情：
+ 使 reduce 阶段在开始前等待更长时间。您可以通过将 Hadoop 配置设置 mapred.reduce.slowstart.completed.maps 更改为更长时间，实现上述目的。有关更多信息，请参阅[创建引导操作以使用 Amazon EMR 集群安装其他软件](emr-plan-bootstrap.md)。
+ 使 Reducer 计数与集群的总 Reducer 容量相符。您可以通过调整作业的 Hadoop 配置设置 mapred.reduce.tasks，实现上述目的。
+ 使用组合器类代码，将需要提取的输出量降至最低。
+ 进行检查，以确保 Amazon EC2 服务不存在影响集群网络性能的问题。您可以使用 [Service Health Dashboard](https://status.aws.amazon.com/) 实现上述目的。
+ 查看集群中实例的 CPU 和内存资源，确保数据处理不会淹没节点的资源。有关更多信息，请参阅[配置 Amazon EMR 集群硬件和联网](emr-plan-instances.md)。
+ 检查 Amazon EMR 集群中使用的 Amazon Machine Image（AMI）的版本。如果版本是 2.3.0 到 2.4.4 (含)。请更新为最高版本。指定范围中的 AMI 版本所用的 Jetty 版本可能无法从映射阶段提供输出。当 Reducer 无法从映射阶段获取输出时，会发生提取错误。

  Jetty 是一种开源 HTTP 服务器，用于 Hadoop 集群中的机器间通信。

# Amazon EMR 集群错误：File could only be replicated to 0 nodes instead of 1
<a name="emr-troubleshoot-error-resource-2"></a>

当将文件写入 HDFS 时，会复制到多个核心节点。当您看到此错误时，这意味着 NameNode 守护程序在 HDFS 中没有任何可用的 DataNode实例可供写入数据。换句话说，没有发生数据块复制。此错误可能是由多种问题导致的：
+ HDFS 文件系统可能已经用尽了空间。这是最有可能的原因。
+ DataNode 作业运行时实例可能不可用。
+ DataNode 实例可能已被阻止，无法与主节点通信。
+ 核心实例组中的实例可能并不可用。
+ 权限可能会缺失。例如， JobTracker 守护程序可能无权创建任务跟踪器信息。
+  DataNode 实例的预留空间设置可能不足。通过检查 dfs.datanode.du.reserved 配置设置，确定情况是否如此。

要检查此问题是否由 HDFS 磁盘空间耗尽所致，请查看中的`HDFSUtilization` CloudWatch指标。如果此值过高，您可以将其它核心节点添加到此集群。如果您认为您的集群可能耗尽 HDFS 磁盘空间，则可以在中设置警报， CloudWatch 以便在的`HDFSUtilization`值超过一定水平时提醒您。有关更多信息，请参阅[手动调整正在运行的 Amazon EMR 集群的大小](emr-manage-resize.md)和[使用监控 Amazon EMR 指标 CloudWatch](UsingEMR_ViewingMetrics.md)。

如果 HDFS 空间不足不是问题，请检查 DataNode 日志、 NameNode日志和网络连接是否存在其他可能阻止 HDFS 复制数据的问题。有关更多信息，请参阅 [查看 Amazon EMR 日志文件](emr-manage-view-web-log-files.md)。

# Amazon EMR 集群错误：Deny-listed nodes
<a name="emr-troubleshoot-error-resource-3"></a>

该 NodeManager 守护程序负责启动和管理核心节点和任务节点上的容器。容器由 NodeManager 在主节点上运行的 ResourceManager 守护程序分配给守护程序。通过心跳 ResourceManager 监视 NodeManager 节点。

在以下几种情况下， ResourceManager 守护程序拒绝会列出 a NodeManager，将其从可用于处理任务的节点池中删除：
+ 如果在 NodeManager 过去 10 分钟（600,000 毫秒）内没有向 ResourceManager 守护程序发送心跳。可以使用 `yarn.nm.liveness-monitor.expiry-interval-ms` 配置设置来配置此时间段。有关更改 Yarn 配置设置的更多信息，请参阅《Amazon EMR 版本指南》**中的[配置应用程序](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps.html)。
+ NodeManager 检查由`yarn.nodemanager.local-dirs`和确定的磁盘的运行状况`yarn.nodemanager.log-dirs`。该检查包括权限和可用磁盘空间 (< 90%)。如果某个磁盘未通过检查，则 NodeManager 会停止使用该特定磁盘，但仍会将节点状态报告为运行正常。如果有多个磁盘未通过检查，则该节点将被报告为运行状况不佳， ResourceManager 并且不会为该节点分配新的容器。

如果 NodeManager 某个节点的失败任务超过三个，则应用程序主服务器也可以拒绝列出该节点。您可以使用 `mapreduce.job.maxtaskfailures.per.tracker` 配置参数将此值更改为更高的值。您可以更改的其它配置设置可控制将任务标记为失败之前的尝试次数：用于映射任务的 `mapreduce.map.max.attempts` 和用于缩减任务的 `mapreduce.reduce.maxattempts`。有关更改配置设置的更多信息，请参阅《Amazon EMR 版本指南》**中的[配置应用程序](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps.html)。

# Amazon EMR 集群节流错误
<a name="emr-throttling-error"></a>

当 Amazon EMR 因为其他服务限制了活动*Amazon EC2*而无法完成请求时，*Amazon EC2*就会出现 “启动集群时被限制” 和 “由于限制而无法配置实例” 错误。Amazon EC2 是限制错误的最常见来源，但其它服务可能是限制错误的原因。[AWS 服务限制](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)适用于每个区域以提高性能，节流错误表明您已超出该区域中账户的服务限制。

## 可能的原因
<a name="emr-failed-to-provision-instances-due-to-throttling-causes"></a>

Amazon EC2 节流错误的最常见来源是启动了大量的集群实例，因此超出了 EC2 实例的服务限制。集群实例可能会因以下原因启动：
+ 创建了新集群。
+ 手动调整了集群。有关更多信息，请参阅[手动调整正在运行的 Amazon EMR 集群的大小](emr-manage-resize.md)。
+ 作为自动扩展规则的结果，集群中的实例组添加实例（向外扩展）。有关更多信息，请参阅[了解自动伸缩角色](emr-automatic-scaling.md#emr-scaling-rules)。
+ 集群中的实例队列添加实例以满足增加的目标容量。有关更多信息，请参阅[规划和配置 Amazon EMR 集群的实例集](emr-instance-fleet.md)。

向 Amazon EC2 发出的 API 请求的频率或类型也可能导致节流错误。有关 Amazon EC2 如何限制 API 请求的更多信息，请参阅《Amazon EC2 API 参考》**中的[查询 API 请求率](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/query-api-troubleshooting.html#api-request-rate)。

## Solutions
<a name="emr-throttling-error-solutions"></a>

考虑以下解决方案：
+ 按照《Amazon Web Services 一般参考》**中的 [AWS Service Quotas](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html) 中的说明请求提高服务限额。对于某些人来说 APIs，设置 CloudWatch 活动可能比增加限额更好。有关更多详细信息，请参阅[何时在中设置 EMR 事件 CloudWatch](emr-service-limits-cloudwatch-events.md)。
+ 如果您的集群以相同的时间表启动（例如，在整点开始时），请考虑错开启动时间。
+ 如果您有针对峰值需求而定义大小的集群，并且您定期拥有实例容量，请考虑指定自动扩展以按需添加和删除实例。通过这种方式，可以更高效地使用实例，并且根据需求配置文件，可以跨账户在给定时间请求更少的实例。有关更多信息，请参阅 [将自动扩展与 Amazon EMR 中实例组的自定义策略结合使用](emr-automatic-scaling.md)。

# Amazon EMR 集群错误：Instance type not supported
<a name="emr-INSTANCE_TYPE_NOT_SUPPORTED-error"></a>

如果您创建集群失败，并显示错误消息 “请求的可用区不支持请求的实例类型*InstanceType*”，则表示您创建了集群，并为创建集群的区域和可用区的 Amazon EMR 不支持的一个或多个实例组指定了实例类型。Amazon EMR 可能在区域内的一个可用区域中支持某个实例类型，而在另一个可用区中则不支持。为集群选择的子网决定区域内的可用区。

## 解决方案
<a name="emr-INSTANCE_TYPE_NOT_SUPPORTED-error-solutions"></a>

**使用确定可用区中的可用实例类型 AWS CLI**
+ 使用带 `--dry-run` 选项的 `ec2 run-instances` 命令。在以下示例中，替换*m5.xlarge*为您要使用的实例类型、*ami-035be7bafff33b6b6*与该实例类型关联的 AMI 以及*subnet-12ab3c45*要查询的可用区中的子网。

  ```
  aws ec2 run-instances --instance-type m5.xlarge --dry-run --image-id ami-035be7bafff33b6b6 --subnet-id subnet-12ab3c45
  ```

  有关查找 AMI ID 的说明，请参阅[查找 Linux AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html)。您可以使用 [describe-subnets](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/describe-subnets.html) 命令查找子网 ID。

要了解有关如何发现可用实例类型的更多信息，请参阅[查找 Amazon EC2 实例类型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-discovery.html)。

确定可用的实例类型后，可以执行以下任一操作：
+ 在同一个区域和 EC2 子网中创建集群，并选择与初始选择具有相似功能的其它实例类型。有关受支持实例类型的列表，请参阅 [Amazon EMR 支持的实例类型](emr-supported-instance-types.md)。要比较 EC2 实例类型的功能，请参阅 [Amazon EC2 实例类型](https://aws.amazon.com/ec2/instance-types/)。
+ 在提供实例类型可用且受 Amazon EMR 支持的可用区中为集群选择子网。

**减少因 Amazon EMR 中不支持的主实例类型而导致的实例集集群启动失败**

在 Amazon EMR 集群中，主节点是必不可少的。如果 Amazon EMR 尝试在不支持主实例类型的可用区中启动集群，EMR 集群启动可能会失败并出现 `instance type not supported` 错误。Amazon EMR 中针对实例队列集群的增强可用区选择会自动筛选出您在集群配置中指定的主实例类型不支持 AZs 的主实例类型。这意味着 Amazon EMR 不会选择不支持已配置主实例类型的可用区，从而防止由于实例类型不受支持而导致集群启动失败。

要实现此改进，请为集群的服务角色或策略添加所需的权限。`AmazonEMRServicePolicy_v2` 的最新版本包含此权限，因此如果您使用此策略，则可以改进。如果您使用自定义服务角色或策略，请在启动集群时添加 `ec2:DescribeInstanceTypeOfferings` 权限。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "ec2:DescribeInstanceTypeOfferings"
      ],
      "Effect": "Allow",
      "Resource": [
        "*"
      ],
      "Sid": "AllowEC2Describeinstancetypeofferings"
    }
  ]
}
```

------

# Amazon EMR 集群错误：EC2 is out of capacity
<a name="emr-EC2_INSUFFICIENT_CAPACITY-error"></a>

*EC2 容量不足，因为*当您尝试在没有更多指定 EC2 实例类型的可用区中创建集群或向集群添加实例时，会发生*InstanceType*错误。为集群选择的子网决定可用区。

要创建集群，请执行以下操作之一：
+ 指定具有相似功能的不同实例类型
+ 在另一个区域中创建集群
+ 在可用区中选择您想要的实例类型可用的子网。

要将实例添加到正在运行的集群中，请执行以下操作之一：
+ 修改实例组配置或实例集配置，以添加具有类似功能的可用实例类型。有关受支持实例类型的列表，请参阅 [Amazon EMR 支持的实例类型](emr-supported-instance-types.md)。要比较 EC2 实例类型的功能，请参阅 [Amazon EC2 实例类型](https://aws.amazon.com/ec2/instance-types/)。
+ 终止集群并在提供实例类型的区域和可用区中重新创建集群。

# Amazon EMR 集群错误：HDFS replication factor error
<a name="emr-hdfs-insufficient-replication"></a>

当您从核心[实例组](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-uniform-instance-group.html)或[实例集](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-instance-fleet.html)中删除核心节点时，Amazon EMR 可能会遇到 HDFS 复制错误。当您删除核心节点并且核心节点数低于为 Hadoop Distributed File System（HDFS）配置的 [dfs.replication 因子](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-hdfs-config.html)时，会发生此错误。因此，Amazon EMR 无法安全执行操作。要确定 `dfs.replication` 配置的默认值，请使用 [HDFS 配置](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-hdfs-config.html)。

## 可能的原因
<a name="emr-hdfs-insufficient-replication-possible-causes"></a>

有关导致 HDFS 复制因子错误的可能原因，请参见下文：
+ 如果您手动将核心实例组或实例集的[大小调整](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-manage-resize.html)为低于配置的 `dfs.replication` 因子。
+ 您的[托管扩展](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-managed-scaling.html)或[自动扩展](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-automatic-scaling.html)策略可能允许扩展，将核心节点的数量减少到 `dfs.replication` 阈值以下。
+ 如果 Amazon EMR 尝试在集群具有 []() 定义的最小核心节点数时[替换](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-node-replacement.html)运行状况不佳的核心节点，也可能发生此错误。

## 解决方案和最佳实践
<a name="emr-hdfs-insufficient-replication-best-practices"></a>

有关解决方案和最佳实践，请参见下文：
+ 手动调整 Amazon EMR 集群的大小时，请勿将其缩减到 `dfs.replication` 以下，因为 Amazon EMR 无法安全完成大小调整。
+ 使用托管扩展或自动扩展时，请确保集群的最小容量不低于 `dfs.replication` 因子。
+ 核心实例的数量应至少为 `dfs.replication`\$11。这样可确保在启用运行状况不佳的核心替换的情况下，Amazon EMR 成功替换运行状况不佳的核心节点。

**重要**  
如果将 `dfs.replication` 设置为 1，单个核心节点故障可能会导致 HDFS 数据丢失。如果您的0集群具有 HDFS 存储，建议您为集群配置至少四个核心节点用于生产工作负载，以避免数据丢失，并将 `dfs.replication` 因子至少设置为 2。

# Amazon EMR 集群错误：HDFS insufficient space error
<a name="emr-hdfs-insufficient-space"></a>

 如果您尝试删除核心节点，则可能会出现 Hadoop Distributed File System（HDFS）空间不足错误，由于 HDFS 中的剩余空间不足，Amazon EMR 无法安全完成操作。在 Amazon EMR 删除核心节点之前，该节点上的所有 HDFS 数据必须传输到其他核心节点，以确保数据冗余。但如果其他核心节点上没有足够的空间进行复制，则 Amazon EMR 无法正常停用该节点。

## 可能的原因
<a name="emr-hdfs-insufficient-space-possible-causes"></a>

 有关 HDFS 空间不足错误的可能原因列表，请参见下文：
+ 如果在缩减之前剩余节点上没有足够的 HDFS 空间进行数据复制，您手动缩减核心实例组或实例集。
+ 在没有足够的 HDFS 空间进行数据复制时，托管扩展或自动扩展会缩减核心实例组或实例集。
+ Amazon EMR 尝试替换运行状况不佳的核心节点，但由于 HDFS 空间不足，无法安全替换该节点。

## 解决方案和最佳实践
<a name="emr-hdfs-insufficient-space-best-practices"></a>

有关解决方案和最佳实践，请参见下文：
+ 纵向扩展 Amazon EMR 集群中核心节点的数量。如果您使用托管扩展或自动扩展，请增加核心节点的最小容量。
+ 在创建 EMR 集群时，对核心节点使用更大的 EBS 卷。
+ 删除 EMR 集群中不需要的 HDFS 数据。我们建议您设置 CloudWatch 警报以监控集群中的`HDFSUtilization`指标，以了解您的 EMR 集群空间是否不足。

# Amazon EMR 操作期间的集群输入和输出错误
<a name="emr-troubleshoot-errors-io"></a>

以下是集群输入与输出操作中的常见错误。使用本主题中的指南进行问题排查并检查配置。

**Topics**
+ [您的 Amazon Simple Storage Service（Amazon S3）路径中是否至少有三个斜杠？](#threeslashes)
+ [您是否正在尝试以递归的方式遍历输入目录？](#recurseinput)
+ [您的输出目录是否已经存在？](#directoryexist)
+ [您是否尝试指定一个使用 HTTP URL 的资源？](#httpurl)
+ [您是否在使用无效名称格式引用 Amazon S3 存储桶？](#validdnsname)
+ [您在向 Amazon S3 装载数据或者从中移出数据时是否遇到问题？](#emr-troubleshoot-errors-io-1)

## 您的 Amazon Simple Storage Service（Amazon S3）路径中是否至少有三个斜杠？
<a name="threeslashes"></a>

 在指定 Amazon S3 存储桶时，必须在 URL 的末尾加上终止斜杠。例如，您应该使用 "s3n://amzn-s3-demo-bucket1/" 而不是 "s3n://amzn-S3-demo-bucket1/" 来引用存储桶，否则 Hadoop 在大多数情况下会导致集群失败。

## 您是否正在尝试以递归的方式遍历输入目录？
<a name="recurseinput"></a>

 Hadoop 不会以递归的方式搜索文件的输入目录。如果您拥有 /corpus/01/01.txt、/corpus/01/02.txt、/corpus/02/01.txt 等目录结构，且指定 /corpus/ 作为集群的输入参数，则 Hadoop 将找不到任何输入文件，因为 /corpus/ 目录为空，且 Hadoop 不会查看子目录的内容。同样地，Hadoop 不会以递归的方式查看 Amazon S3 存储桶的子目录。

 输入文件必须直接放入您指定的输入目录或者 Amazon S3 存储桶中，而不是子目录中。

## 您的输出目录是否已经存在？
<a name="directoryexist"></a>

 如果您指定的输出路径已经存在，Hadoop 会在大多数情况下导致集群失败。这意味着如果您运行集群一次，并使用完全相同的参数再运行一次，那么第一次正常很可能运行，但后面的运行就再也不会成功；因为在第一次运行后，会出现输出路径，这导致所有后续的运行失败。

## 您是否尝试指定一个使用 HTTP URL 的资源？
<a name="httpurl"></a>

 Hadoop 不接受使用 http:// 前缀指定的资源位置。您不能使用 HTTP URL 引用资源。例如，以 http://mysite/myjar.jar 作为 JAR 参数进行传递会导致集群失败。

## 您是否在使用无效名称格式引用 Amazon S3 存储桶？
<a name="validdnsname"></a>

 如果您尝试在 Amazon EMR 中使用 "amzn-s3-demo-bucket1.1" 之类的存储桶名称，集群将会失败，因为 Amazon EMR 要求存储桶名称是有效的 RFC 2396 主机名；名称不能以数字结尾。另外，根据 Hadoop 的要求，与 Amazon EMR 一起使用的 Amazon S3 存储桶名称必须仅包含小写字母、数字、英文句点（.）和连字符（-）。有关如何格式化 Amazon S3 存储桶名称的更多信息，请参阅《Amazon Simple Storage Service 用户指南》**中的[存储桶限制](https://docs.aws.amazon.com/AmazonS3/latest/userguide/index.html?BucketRestrictions.html)。

## 您在向 Amazon S3 装载数据或者从中移出数据时是否遇到问题？
<a name="emr-troubleshoot-errors-io-1"></a>

 Amazon S3 是最常见的 Amazon EMR 输入与输出源。常见的错误是将 Amazon S3 当做典型的文件系统进行处理。Amazon S3 和文件系统之间存在区别，在运行集群时必须予以考虑。
+  如果 Amazon S3 中出现内部错误，您的应用程序必须顺利地予以处理，并重试该操作。
+  如果调用 Amazon S3 的返回时间太长，那么，您的应用程序可能必须降低调用 Amazon S3 的频率。
+  列出 Amazon S3 存储桶中的所有对象是一种成本很高的调用。您的应用程序应该将此类操作的次数降到最低程度。

 您可以使用多种方式提高您的集群与 Amazon S3 的交互。
+  使用 Amazon EMR 的最新发行版启动您的集群。
+ 使用 S3 DistCp 将对象移入和移出 Amazon S3。S3 DistCp 实施了错误处理、重试和回退，以满足 Amazon S3 的要求。有关更多信息，请参阅[使用 S3 进行分布式复制DistCp](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/UsingEMR_s3distcp.html)。
+  设计应用程序时应考虑最终一致性这一因素。在集群运行时将 HDFS 用于中间数据存储和 Amazon S3，以便仅输入原始数据与输出最终结果。
+  如果您的集群每秒向 Amazon S3 提交不少于 200 个事务，[请联系支持人员](https://aws.amazon.com/contact-us/)，以每秒提交更多的事务为前提准备存储桶，并考虑使用 [Amazon S3 性能提示与和技巧](https://aws.amazon.com/blogs/aws/amazon-s3-performance-tips-tricks-seattle-hiring-event/)中所述的密钥分区策略。
+  设置 Hadoop 配置设置 io.file.buffer.size 为 65536。这可让 Hadoop 在 Amazon S3 对象中搜索时花费较少的时间。
+  如果您的集群遇到 Amazon S3 并发问题，请考虑禁用 Hadoop 的推测执行功能。当您排除速度很慢的集群故障时，这也非常有用。您可以通过将 `mapreduce.map.speculative` 和 `mapreduce.reduce.speculative` 属性设置为 `false` 来执行此操作。在您启动集群时，您可以使用 `mapred-env` 配置分类来设置这些值。有关更多信息，请参阅 *Amazon EMR 发行版指南*中的[配置应用程序](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps.html)。
+  如果您运行的是 Hive 集群，请参阅 [您是否有关于在 Amazon S3 与 Hive 之间加载数据的问题？](emr-troubleshoot-error-hive.md#emr-troubleshoot-error-hive-3)。

 有关 Amazon S3 权限的更多信息，请参阅《Amazon Simple Storage Service 用户指南》**中的 [Amazon S3 错误最佳实践](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ErrorBestPractices.html)。

# Amazon EMR 集群操作期间的权限错误
<a name="emr-troubleshoot-error-permissions"></a>

使用权限或凭证时常出现以下错误。

**Topics**
+ [您将正确凭证传递给了 SSH 吗？](#correctcred)
+ [如果您在使用 IAM，您是否有正确的 Amazon EC2 策略设置？](#check-iam-permissions)

## 您将正确凭证传递给了 SSH 吗？
<a name="correctcred"></a>

 如果您不能使用 SSH 连接主节点，最有可能是您的安全凭证出了问题。

 首先，检查并确保包含您 SSH 密钥的 .pem 文件有正确的权限。您可以使用 chmod 更改 .pem 文件上的权限，如以下示例所示，其中，要把 mykey.pem 替换为自己的 .pem 文件的名称。

```
1. chmod og-rwx mykey.pem
```

 第二种可能性是，您没使用创建集群时指定的密钥对。如果您创建了多个密钥对，这种情况很容易出现。检查 Amazon EMR 控制台中的集群详细信息（或使用 CLI 中的 `--describe` 选项），并确保创建集群时指定的密钥对的名称无误。

 验证您在使用正确的密钥对且 .pem 文件上的权限正确设置后，您可以使用以下命令通过 SSH 连接主节点，其中，要把 mykey.pem 替换为您个人 .pem 文件的名称，把 `hadoop@ec2-01-001-001-1.compute-1.amazonaws.com` 替换为主节点的公有 DNS 名称（通过 CLI 中的 `--describe` 选项或通过 Amazon EMR 控制台实现）。

**重要**  
在连接到 Amazon EMR 集群节点时，必须使用登录名 `hadoop`，否则可能发生类似 `Server refused our key` 的错误。

```
1. ssh -i mykey.pem hadoop@ec2-01-001-001-1.compute-1.amazonaws.com				
```

 有关更多信息，请参阅[使用 SSH 连接到 Amazon EMR 集群主节点](emr-connect-master-node-ssh.md)。

## 如果您在使用 IAM，您是否有正确的 Amazon EC2 策略设置？
<a name="check-iam-permissions"></a>

 因为 Amazon EMR 使用 EC2 实例作为节点，Amazon EMR 的用户也需要设置某些 Amazon EC2 策略，以便 Amazon EMR 能代表用户管理那些实例。如果您没有设置所需的权限，则 Amazon EMR 返回以下错误：**“账户没有调用 EC2 的权限。”** 

 有关您的 IAM 账户需要设置以运行 Amazon EMR 的 Amazon EC2 策略的更多信息，请参阅[Amazon EMR 如何与 IAM 配合使用](security_iam_service-with-iam.md)。

# Hive 集群错误
<a name="emr-troubleshoot-error-hive"></a>

 您通常可以在 `syslog` 文件中找出 Hive 错误的原因，可以从 **Steps (步骤)** 窗格中链接到此文件。如果您无法在此文件中确定问题，那么可以检查 Hadoop 任务尝试错误消息。在 **Task Attempts (任务尝试)** 窗格上链接到此问题。

Hive 集群常会出现以下错误。

**Topics**
+ [您使用的是否是最新版本的 Hive？](#emr-troubleshoot-error-hive-0)
+ [您是否在 Hive 脚本中遇到了语法错误？](#emr-troubleshoot-error-hive-1)
+ [作业是否在交互运行时失败？](#emr-troubleshoot-error-hive-2)
+ [您是否有关于在 Amazon S3 与 Hive 之间加载数据的问题？](#emr-troubleshoot-error-hive-3)

## 您使用的是否是最新版本的 Hive？
<a name="emr-troubleshoot-error-hive-0"></a>

 最新版本的 Hive 具有所有当前修补程序和缺陷修复，可以解决您的问题。

## 您是否在 Hive 脚本中遇到了语法错误？
<a name="emr-troubleshoot-error-hive-1"></a>

 如果步骤失败，请查看运行 Hive 脚本步骤日志的 `stdout` 文件。如果错误不在此文件中，请查看失败任务尝试的任务尝试日志的 `syslog` 文件。有关更多信息，请参阅[查看 Amazon EMR 日志文件](emr-manage-view-web-log-files.md)。

## 作业是否在交互运行时失败？
<a name="emr-troubleshoot-error-hive-2"></a>

 如果您在主节点上交互运行 Hive 并且集群失败，那么请查看失败任务尝试的任务尝试日志中的 `syslog` 条目。有关更多信息，请参阅[查看 Amazon EMR 日志文件](emr-manage-view-web-log-files.md)。

## 您是否有关于在 Amazon S3 与 Hive 之间加载数据的问题？
<a name="emr-troubleshoot-error-hive-3"></a>

 如果您有关于访问 Amazon S3 中数据的问题，那么请先检查 [您在向 Amazon S3 装载数据或者从中移出数据时是否遇到问题？](emr-troubleshoot-errors-io.md#emr-troubleshoot-errors-io-1) 中列出的可能原因。如果那些问题都不是原因，请考虑以下 Hive 特定的选项。
+ 确保您使用的是最新版本的 Hive，它具有可解决您的问题的所有当前修补程序和错误修复。有关更多信息，请参阅 [Apache Hive](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-hive.html)。
+  使用 `INSERT OVERWRITE` 要求列出 Amazon S3 存储桶或文件夹的内容。这是一项成本高昂的操作。如果可能的话，请手动修剪路径，而不是让 Hive 列出并删除现有对象。
+ 如果您使用 5.0 之前的 Amazon EMR 发行版，则可以使用 HiveQL 中的以下命令，在集群上本地预缓存 Amazon S3 列表操作的结果：

  ```
  set hive.optimize.s3.query=true;
  ```
+  在可能的情况下，使用静态分割。
+ 在 Hive 和 Amazon EMR 的一些版本中，使用 ALTER TABLES 有可能会失败，因为此表的存储位置可能与 Hive 的期望位置不同。解决方法是在 `/home/hadoop/conf/core-site.xml` 中添加或更新以下内容：

  ```
  <property>
      <name>fs.s3n.endpoint</name>
      <value>s3.amazonaws.com</value>
  </property>
  ```

# Amazon EMR 集群操作期间的 VPC 错误
<a name="emr-troubleshoot-error-vpc"></a>

Amazon EMR 的 VPC 配置常会出现以下错误。

**Topics**
+ [无效子网配置](#emr-troubleshoot-error-gateway)
+ [缺少 DHCP 选项集](#emr-troubleshoot-error-dhcp)
+ [权限错误](#emr-troubleshoot-error-denied)
+ [导致 `START_FAILED` 的错误](#emr-troubleshoot-error-vpc-dns)
+ [集`Terminated with errors`群 NameNode 但无法启动](#emr-troubleshoot-namenode-dns)

## 无效子网配置
<a name="emr-troubleshoot-error-gateway"></a>

 在 **Cluster Details（集群详细信息）**页面的 **Status（状态）**字段中，您会看到与以下内容相似的错误：

`The subnet configuration was invalid: Cannot find route to InternetGateway in main RouteTable rtb-id for vpc vpc-id.`

要解决此问题，您必须创建 Internet 网关并将其连接到您的 VPC。有关更多信息，请参阅[在您的 VPC 中添加互联网网关](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Internet_Gateway.html)。

或者，验证您是否已经为 VPC 配置**启用 DNS 解析**并启用**启用 DNS 主机名支持**。有关更多信息，请参阅[将 DNS 与您的 VPC 一起使用](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-dns.html)。

## 缺少 DHCP 选项集
<a name="emr-troubleshoot-error-dhcp"></a>

您可以看到集群系统日志 (syslog) 的步骤失败信息包含与以下内容相似的错误：

` ERROR org.apache.hadoop.security.UserGroupInformation (main): PriviledgedActionException as:hadoop (auth:SIMPLE) cause:java.io.IOException: org.apache.hadoop.yarn.exceptions.ApplicationNotFoundException: Application with id 'application_id' doesn't exist in RM. `

或者 

`ERROR org.apache.hadoop.streaming.StreamJob (main): Error Launching job : org.apache.hadoop.yarn.exceptions.ApplicationNotFoundException: Application with id 'application_id' doesn't exist in RM.`

要解决此问题，必须配置 VPC，使其包含将参数设置为以下值的 DHCP 选项集：

**注意**  
如果您使用 AWS GovCloud （美国西部）区域，请将 domain-name 设置为，**us-gov-west-1.compute.internal**而不是以下示例中使用的值。
+ **domain-name** = **ec2.internal**

  如果您所在的区域是美国东部（弗吉尼亚北部），请使用 **ec2.internal**。对于其他地区，请使用*region-name***.compute.internal**。例如，在 us-west-2 中，请使用 **domain-name**=**us-west-2.compute.internal**。
+ **domain-name-servers** = **AmazonProvidedDNS**

有关更多信息，请参阅[ DHCP 选项集](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_DHCP_Options.html)。

## 权限错误
<a name="emr-troubleshoot-error-denied"></a>

`stderr` 日志中记录的某个步骤失败表示 Amazon S3 资源没有适当的权限。这是一个 403 错误，内容如下所示：

```
Exception in thread "main" com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: REQUEST_ID
```

如果设置 ActionOnFailure 为`TERMINATE_JOB_FLOW`，则会导致集群终止，`SHUTDOWN_COMPLETED_WITH_ERRORS`状态为。

可通过几种方法解决此问题，包括：
+ 如果您正在 VPC 中使用 Amazon S3 存储桶策略，请确保通过创建一个 VPC 终端节点并在创建该终端节点时在 Policy (策略) 选项下选择 **Allow all (全部允许)** 来授予对所有存储桶的访问权。
+ 确保与 S3 资源关联的任何策略都包括您从中启动集群的 VPC。
+ 尝试从集群中运行以下命令来验证您是否能访问存储桶

  ```
  hadoop fs -copyToLocal s3://path-to-bucket /tmp/
  ```
+ 通过在集群上的 `log4j.logger.org.apache.http.wire` 文件中将 `DEBUG` 参数设置为 `/home/hadoop/conf/log4j.properties`，可以获得更具体的调试信息。在尝试从集群访问存储桶后，可以查看 `stderr` 日志文件。该日志文件将提供更多详细信息：

  ```
  Access denied for getting the prefix for bucket - us-west-2.elasticmapreduce with path samples/wordcount/input/
  15/03/25 23:46:20 DEBUG http.wire: >> "GET /?prefix=samples%2Fwordcount%2Finput%2F&delimiter=%2F&max-keys=1 HTTP/1.1[\r][\n]"
  15/03/25 23:46:20 DEBUG http.wire: >> "Host: us-west-2.elasticmapreduce.s3.amazonaws.com[\r][\n]"
  ```

## 导致 `START_FAILED` 的错误
<a name="emr-troubleshoot-error-vpc-dns"></a>

在 AMI 3.7.0 之前， VPCs 如果指定了主机名，Amazon EMR 会将子网的内部主机名映射到自定义域地址，如下所示：。`ip-X.X.X.X.customdomain.com.tld`例如，如果主机名为 `ip-10.0.0.10` 且 VPC 已将域名选项设置为 customdomain.com，则通过 Amazon EMR 映射所生成的主机名将为 `ip-10.0.1.0.customdomain.com`。这会在 `/etc/hosts` 中添加一个条目以将主机名解析为 10.0.0.10。此行为已随 AMI 3.7.0 更改，现在 Amazon EMR 已完全遵循 VPC 的 DHCP 配置。以前，客户还可使用引导操作来指定主机名映射。

如果您想保留此行为，则必须提供 DNS，并为自定义域转发所需的解析设置。

## 集`Terminated with errors`群 NameNode 但无法启动
<a name="emr-troubleshoot-namenode-dns"></a>

在使用自定义 DNS 域名的 VPC 中启动 EMR 集群时，您的集群可能会启动失败并在控制台中显示以下错误消息：

```
Terminated with errors  On the master instance(instance-id), bootstrap action 1 returned a  non-zero return code
```

失败是由于 NameNode 无法启动造成的。这将导致在 NameNode 日志中发现以下错误，其 Amazon S3 URI 的格式为`s3://amzn-s3-demo-bucket/logs/cluster-id/daemons/master instance-id/hadoop-hadoop-namenode-master node hostname.log.gz`：

```
2015-07-23 20:17:06,266 WARN
      org.apache.hadoop.hdfs.server.namenode.FSNamesystem (main): Encountered  exception
      loading fsimage  java.io.IOException: NameNode is not formatted.      
      at
      org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:212)
           at
      org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFSImage(FSNamesystem.java:1020)
           at
      org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFromDisk(FSNamesystem.java:739)
           at
      org.apache.hadoop.hdfs.server.namenode.NameNode.loadNamesystem(NameNode.java:537)
           at
      org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:596)      
      at  org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:765)
           at
      org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:749)      
      at
      org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1441)
           at
      org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1507)
```

这是由一个潜在问题造成的：由于同时使用了 AWS提供的 DNS 服务器和用户提供的自定义 DNS 服务器，在 VPC 中启动 EMR 集群时，EC2 实例可能拥有多组完全限定域名。如果用户提供的 DNS 服务器未为用于指定 EMR 集群中节点的任何 A 记录提供任何指针 (PTR) 记录，则这种配置方式会导致集群启动失败。解决方案是为每个 A 记录 (在 VPC 的任意子网中启动 EC2 实例时创建) 添加 1 条 PTR 记录。

# 流处理 Amazon EMR 集群错误
<a name="emr-troubleshoot-error-streaming"></a>

 您通常可以在 `syslog` 文件中找出流式错误的原因。在 **Steps (步骤)** 窗格上链接到此问题。

流式集群常会出现以下错误。

**Topics**
+ [数据是否以错误的格式发送到映射器？](#emr-troubleshoot-error-streaming-1)
+ [您的脚本是否超时？](#emr-troubleshoot-error-streaming-2)
+ [是否正在传递无效的流式参数？](#invalidarg)
+ [您的脚本退出时是否有错误？](#emr-troubleshoot-error-streaming-3)

## 数据是否以错误的格式发送到映射器？
<a name="emr-troubleshoot-error-streaming-1"></a>

 要检查是否出现了这种错误，请在任务尝试日志的失败任务尝试的 `syslog` 文件中查看错误消息。有关更多信息，请参阅[查看 Amazon EMR 日志文件](emr-manage-view-web-log-files.md)。

## 您的脚本是否超时？
<a name="emr-troubleshoot-error-streaming-2"></a>

 映射器或 Reducer 脚本的默认超时值为 600 秒。如果脚本需要的时间长于此时长，那么任务尝试将会失败。通过在任务尝试日志中检查失败任务尝试的 `syslog` 文件，可以检验是否出现了这种情况。有关更多信息，请参阅[查看 Amazon EMR 日志文件](emr-manage-view-web-log-files.md)。

 通过为 `mapred.task.timeout` 配置设置设定新值，您可以更改时间限值。此设置会指定毫秒数，经过此时段后，Amazon EMR 将终止尚未读取输入、写入输出或更新其状态字符串的任务。您可以通过传递其它流式参数 `-jobconf mapred.task.timeout=800000` 更新此值。

## 是否正在传递无效的流式参数？
<a name="invalidarg"></a>

 Hadoop 流式处理仅支持以下参数。如果您传递的参数不同于以下列出的内容，集群将会失败。

```
 1. -blockAutoGenerateCacheFiles 
 2. -cacheArchive 
 3. -cacheFile 
 4. -cmdenv 
 5. -combiner 
 6. -debug 
 7. -input 
 8. -inputformat
 9. -inputreader 
10. -jobconf 
11. -mapper
12. -numReduceTasks
13. -output 
14. -outputformat 
15. -partitioner
16. -reducer
17. -verbose
```

 此外，Hadoop 流式处理只能识别使用 Java 语法传入的参数，即前面加一个连字符的参数。如果您传入的参数前面加了两个连字符，集群将会失败。

## 您的脚本退出时是否有错误？
<a name="emr-troubleshoot-error-streaming-3"></a>

 如果映射器或 Reducer 脚本退出时出现错误，您可以在失败任务尝试的任务尝试日志的 `stderr` 文件中找到此错误。有关更多信息，请参阅 [查看 Amazon EMR 日志文件](emr-manage-view-web-log-files.md)。

# Amazon EMR：自定义 JAR 集群错误
<a name="emr-troubleshoot-error-custom-jar"></a>

自定义 JAR 集群常会出现以下错误。

**Topics**
+ [创建作业前，您的 JAR 抛出异常吗？](#emr-troubleshoot-error-custom-jar-1)
+ [您的 JAR 在映射任务内部抛出错误吗？](#emr-troubleshoot-error-custom-jar-2)

## 创建作业前，您的 JAR 抛出异常吗？
<a name="emr-troubleshoot-error-custom-jar-1"></a>

 如果在创建 Hadoop 作业期间您的自定义 JAR 的主程序抛出异常，查看的最佳位置是步骤日志的 `syslog` 文件。有关更多信息，请参阅[查看 Amazon EMR 日志文件](emr-manage-view-web-log-files.md)。

## 您的 JAR 在映射任务内部抛出错误吗？
<a name="emr-troubleshoot-error-custom-jar-2"></a>

 如果在处理输入数据期间您的自定义 JAR 和映射器抛出异常，查看的最佳位置是任务尝试日志的 `syslog` 文件。有关更多信息，请参阅 [查看 Amazon EMR 日志文件](emr-manage-view-web-log-files.md)。

# 亚马逊 EMR AWS GovCloud （美国西部）错误
<a name="emr-troubleshoot-error-govcloud"></a>

 AWS GovCloud （美国西部）区域与其他区域的不同之处在于其安全、配置和默认设置。因此，在使用更一般的疑难解答建议之前，请使用以下清单对特定于 AWS GovCloud （美国西部）地区的 Amazon EMR 错误进行故障排除。
+ 验证 IAM 角色配置是否正确。有关更多信息，请参阅 [配置 IAM 服务角色以获得 Amazon EMR 对 AWS 服务和资源的权限](emr-iam-roles.md)。
+ 确保您的 VPC 配置已正确配置了 DNS resolution/hostname 支持、Internet Gateway 和 DHCP 选项集参数。有关更多信息，请参阅 [Amazon EMR 集群操作期间的 VPC 错误](emr-troubleshoot-error-vpc.md)。

如果这些步骤都不能解决问题，请继续执行排查常见 Amazon EMR 错误的步骤。有关更多信息，请参阅 [Amazon EMR 中的常见错误集合](emr-troubleshoot-errors.md)。

## 查找缺少的集群
<a name="w2aac36c21c47"></a>

如果控制台列表或 `ListClusters` API 中缺少您的集群，请检查以下内容：
+ 确认自完成之日起集群的运行期限小于两个月。Amazon EMR 会免费保存已完成集群的相关元数据信息两个月。您无法从控制台中删除已完成的集群，相反，Amazon EMR 会在两个月后自动清除已完成的集群。
+ 确认您具有查看集群的角色权限。
+ 确认您正在查看的内容与集群 AWS 区域 所在位置相同。

# 对因错误代码而失败的 Amazon EMR 集群进行问题排查
<a name="emr-troubleshoot-failed"></a>

 本节向您介绍对已经失败的集群进行故障排除的过程。这意味着集群终止，出现了错误代码。

**注意**  
当 EMR 集群因错误而终止时，`DescribeCluster`和将`ListClusters` APIs 返回错误代码和错误消息。对于某些集群错误，`ErrorDetail` 数据数组还可以帮助您排查失败的问题。有关更多信息，请参阅 [Amazon EMR 中包含 ErrorDetail 信息的错误代码](emr-troubleshoot-error-errordetail.md)。

如果集群成功运行，但花了很长时间才返回结果，请参阅 [排查 Amazon EMR 集群速度缓慢的问题](emr-troubleshoot-slow.md)。

**Topics**
+ [步骤 1：收集有关 Amazon EMR 集群问题的数据](emr-troubleshoot-failed-1.md)
+ [步骤 2：检查环境](emr-troubleshoot-failed-2.md)
+ [步骤 3：查看最后一次状态更改](emr-troubleshoot-failed-3.md)
+ [步骤 4：检查 Amazon EMR 日志文件](emr-troubleshoot-failed-4.md)
+ [步骤 5：分步测试 Amazon EMR 集群](emr-troubleshoot-failed-5-test-steps.md)

# 步骤 1：收集有关 Amazon EMR 集群问题的数据
<a name="emr-troubleshoot-failed-1"></a>

 对集群进行故障排查的第一步是收集有关出现问题的信息以及集群的当前状态和配置。此信息将在以下步骤中用于确认或排查问题的可能原因。

## 定义问题
<a name="emr-troubleshoot-failed-1-problem"></a>

 首先要对这个问题作出明确的定义。问自己一些问题：
+  我预计发生什么？ 实际发生了什么？ 
+  首次出现此问题是什么时候？ 自那以后有多久发生一次？ 
+  配置或运行集群的方式是否有任何变化？ 

## 集群详细信息
<a name="emr-troubleshoot-failed-1-cluster"></a>

 以下集群详细信息有助于追踪问题。有关如何收集此信息的更多信息，请参阅[查看 Amazon EMR 集群状态和详细信息](emr-manage-view-clusters.md)。
+  集群的标识符。（也称为工作流标识符。） 
+  AWS 区域 以及集群启动时进入的可用区。
+  集群的状态，包括上次状态更改的详细信息。
+  为主节点、核心节点和任务节点指定的 EC2 实例的类型和数量。

# 步骤 2：检查环境
<a name="emr-troubleshoot-failed-2"></a>

Amazon EMR 作为 Web 服务的生态系统的一部分和开源软件运行。影响那些依赖项的事情会影响 Amazon EMR 的性能。

**Topics**
+ [检查服务中断](#emr-troubleshoot-failed-2-outages)
+ [检查使用限制](#emr-troubleshoot-failed-2-limits)
+ [检查发布版](#emr-troubleshoot-failed-2-ami)
+ [检查 Amazon VPC 子网配置](#emr-troubleshoot-failed-2-vpc)

## 检查服务中断
<a name="emr-troubleshoot-failed-2-outages"></a>

 Amazon EMR 在内部使用多种 Amazon Web Services。它在 Amazon EC2 上运行虚拟服务器，在 Amazon S3 上存储数据和脚本，并向报告指标 CloudWatch。中断这些服务的事件很少见。但一旦发生，即可能会导致 Amazon EMR 出现问题。

 进一步操作之前，请检查 [Service Health Dashboard](https://status.aws.amazon.com/)。检查您启动集群的区域，以查看这些服务中是否存在中断事件。

## 检查使用限制
<a name="emr-troubleshoot-failed-2-limits"></a>

 如果您正在启动大型集群，同时启动了多个集群，或者您是 AWS 账户 与其他用户共享的用户，则集群可能因为超过 AWS 服务限制而失败。

 Amazon EC2 将单个 AWS 区域上运行的虚拟服务器实例的数量限制为 20 个按需实例或预留实例。如果您启动一个拥有 20 个以上节点的集群，或者启动的集群导致您的 AWS 账户 活动的 EC2 实例总数超过 20，则该集群将无法启动其所需的所有 EC2 实例，并且可能会失败。出现这种情况时，Amazon EMR 会返回 `EC2 QUOTA EXCEEDED` 错误。您可以通过提交 AWS 提高 Amazon EC2 实例[限制申请来请求增加可在您的账户上运行的 EC2 实例](https://aws.amazon.com/contact-us/ec2-request/)数量。

 可能导致您超出使用限制的另一件事是集群终止与释放其所有资源之间的延迟。根据配置差异，以前的集群可能需要 5-20 分钟的时间才能完全终止并释放分配的资源。如果您在尝试启动集群时收到 `EC2 QUOTA EXCEEDED` 错误，原因可能是最近终止的集群中的资源尚未释放。在这种情况下，您可以[请求增加您的 Amazon EC2 配额](https://aws.amazon.com/contact-us/ec2-request/)，也可以等待 20 分钟并重新启动集群。

 Amazon S3 将在账户上创建的存储桶数量限制为 100。如果您的集群创建的新存储桶超过此限制，则存储桶创建将失败，并可能导致集群失败。

## 检查发布版
<a name="emr-troubleshoot-failed-2-ami"></a>

将用于启动集群的发行版标注与最新的 Amazon EMR 版本进行比较。Amazon EMR 的每个版本都包含改进，例如新的应用程序、功能、补丁和错误修复。影响集群的问题可能已经在最新的发布版中得到修复。如果可能，请使用最新版本的重新运行集群。

## 检查 Amazon VPC 子网配置
<a name="emr-troubleshoot-failed-2-vpc"></a>

如果您的集群是在 Amazon VPC 子网中启动的，则需要按照[在 VPC 中为 Amazon EMR 配置联网](emr-plan-vpc-subnet.md)中所述配置子网。此外，请检查您启动集群的子网是否有足够的空闲弹性 IP 地址，以便为集群中的每个节点分配一个。

# 步骤 3：查看最后一次状态更改
<a name="emr-troubleshoot-failed-3"></a>

 最后一次状态更改提供关于集群最后一次更改状态时所发生的事情的信息。这常常包含一些信息，告诉您当集群把状态更改为 `FAILED` 时出错的地方。例如，如果您启动了流集群并指定了已经在 Amazon S3 中的输出位置，集群将会失败，同时提示最后一次状态更改为“流输出目录已经存在”。

 您可以通过查看集群的详细信息窗格从控制台查找最后一次状态更改值，可以使用 `list-steps` 或 `describe-cluster` 参数从 CLI 查看或使用 `DescribeCluster` 和 `ListSteps` 操作从 API 查看。有关更多信息，请参阅 [查看 Amazon EMR 集群状态和详细信息](emr-manage-view-clusters.md)。

# 步骤 4：检查 Amazon EMR 日志文件
<a name="emr-troubleshoot-failed-4"></a>

 下一步是检查日志文件，以找到错误代码或集群遇到的问题的其它指示。有关可用日志文件、查找日志文件的位置以及如何查看这些日志文件的信息，请参阅[查看 Amazon EMR 日志文件](emr-manage-view-web-log-files.md)。

 可能需要进行一些调查工作才能确定发生了什么。Hadoop 在集群中的各个节点上运行任务尝试中的任务工作。Amazon EMR 可以启动推测性任务尝试，终止未首先完成的其它任务尝试。这会生成重要的活动，并记录到控制器，stderr 和 syslog 日志文件中。此外，多个任务尝试同时运行，但一个日志文件只能线性显示结果。

 首先检查引导操作日志，查看集群启动期间的错误或意外配置更改。从那里查看步骤日志，以确定作为错误步骤的一部分启动的 Hadoop 任务。检查 Hadoop 任务日志以确定失败的任务尝试。任务尝试日志将包含导致任务尝试失败的详细信息。

以下部分说明如何使用各种日志文件识别集群中的错误。

## 检查引导操作日志
<a name="emr-troubleshoot-failed-4-bootstrap-logs"></a>

 引导操作会在集群启动时运行脚本。它们通常用于在集群上安装附加软件或更改默认值的配置设置。检查这些日志可以深入了解集群设置期间发生的错误以及可能影响性能的配置设置更改。

## 检查步骤日志
<a name="emr-troubleshoot-failed-4-step-logs"></a>

 步骤日志有四种类型。
+ **控制器：**包含由 Amazon EMR（Amazon EMR）生成的文件，这些文件由尝试运行您的步骤时遇到的错误引起。如果您的步骤在加载时失败，您可以在此日志中找到堆栈跟踪。此处通常描述加载或访问您的应用程序的错误，以及缺少映射器文件错误。
+  **stderr** 包含处理步骤时发生的错误消息。此处通常介绍应用程序加载错误。此日志有时包含堆栈跟踪。
+ **stdout：**包含由映射器和折叠器（reducer）可执行文件生成的状态。此处通常介绍应用程序加载错误。此日志有时包含应用程序错误消息。
+ **syslog：**包含来自非 Amazon 软件（例如 Apache 和 Hadoop）的日志。流式传输错误通常在此处进行描述。

 检查 stderr 是否有明显的错误。如果 stderr 显示一个简短的错误列表，则该步骤会快速停止并引发错误。这通常由集群中运行的映射器和折叠器（reducer）应用程序中的错误引起。

 检查控制器和 syslog 的最后一行是否有错误或故障通知。注意有关失败任务的任何通知，特别是显示“Job Failed (任务失败)”的时候。

## 检查任务尝试日志
<a name="emr-troubleshoot-failed-4-task-logs"></a>

 如果在前面对步骤日志的分析中发现了一个或多个失败的任务，请调查相应任务尝试的日志，以获得更详细的错误信息。

# 步骤 5：分步测试 Amazon EMR 集群
<a name="emr-troubleshoot-failed-5-test-steps"></a>

 您尝试跟踪错误源时的一项有用的技术是重启集群并逐一向集群提交步骤。这可以让您检查每个步骤的结果然后才处理下一个步骤，让您有机会更正并重新运行失败的步骤。这也有一个优势，即您仅需上传一次输入数据。

**分步测试集群**

1.  启动新集群，启用保持活动状态和终止保护两种功能。保持活动状态可在集群处理了所有待执行的步骤后保持集群运行。终止保护可以防止集群在出现错误时关闭。有关更多信息，请参阅[将 Amazon EMR 集群配置为步骤执行后继续或终止](emr-plan-longrunning-transient.md)和[使用终止保护功能防止 Amazon EMR 集群意外关闭](UsingEMR_TerminationProtection.md)。

1.  向集群提交一个步骤。有关更多信息，请参阅 [将工作提交到 Amazon EMR 集群](emr-work-with-steps.md)。

1.  当该步骤完成处理后，检查步骤日志文件中是否有错误。有关更多信息，请参阅[步骤 4：检查 Amazon EMR 日志文件](emr-troubleshoot-failed-4.md)。查找这些日志文件最快的方法是连接到主节点并查看那里的日志文件。直到该步骤运行一些时间结束或失败，步骤日志文件才会出现。

1.  如果该步骤成功无误，运行下一个步骤。如果有错误，调查日志文件中的错误。如果是您的代码中的错误，更正并重新运行该步骤。继续操作直到所有步骤均运行无误。

1.  当您完成了集群调试想终止集群时，您必须手动终止该集群。这么做是必要的，因为集群启动时启用了终止保护。有关更多信息，请参阅 [使用终止保护功能防止 Amazon EMR 集群意外关闭](UsingEMR_TerminationProtection.md)。

# 排查 Amazon EMR 集群速度缓慢的问题
<a name="emr-troubleshoot-slow"></a>

 本节向您介绍对仍在运行但花费很长时间才能返回结果的集群进行故障排除的过程。有关当集群已终止且出现错误代码时要执行的操作的详细信息，请参见 [对因错误代码而失败的 Amazon EMR 集群进行问题排查](emr-troubleshoot-failed.md) 

 Amazon EMR 可让您指定集群中实例的数量和类型。这些规范是对完成您的数据处理所需速度造成影响的主要手段。您可能考虑的一件事情是重新运行该集群，这次要指定拥有更多资源的 EC2 实例或指定集群中更多的实例。有关更多信息，请参阅[配置 Amazon EMR 集群硬件和联网](emr-plan-instances.md)。

 以下主题向您介绍确定造成集群缓慢的其它原因的过程。

**Topics**
+ [步骤 1：收集有关 Amazon EMR 集群问题的数据](emr-troubleshoot-slow-1.md)
+ [步骤 2：检查 EMR 集群环境](emr-troubleshoot-slow-2.md)
+ [步骤 3：检查 Amazon EMR 集群的日志文件](emr-troubleshoot-slow-3.md)
+ [步骤 4：检查 Amazon EMR 集群和实例运行状况](emr-troubleshoot-slow-4.md)
+ [步骤 5：检查已暂停的组](emr-troubleshoot-slow-5.md)
+ [步骤 6：查看 Amazon EMR 集群的配置设置](emr-troubleshoot-slow-6.md)
+ [步骤 7：检查 Amazon EMR 集群的输入数据](emr-troubleshoot-slow-7.md)

# 步骤 1：收集有关 Amazon EMR 集群问题的数据
<a name="emr-troubleshoot-slow-1"></a>

 对集群进行故障排查的第一步是收集有关出现问题的信息以及集群的当前状态和配置。此信息将在以下步骤中用于确认或排查问题的可能原因。

## 定义问题
<a name="emr-troubleshoot-slow-1-problem"></a>

 首先要对这个问题作出明确的定义。问自己一些问题：
+  我预计发生什么？ 实际发生了什么？ 
+  首次出现此问题是什么时候？ 自那以后有多久发生一次？ 
+  配置或运行集群的方式是否有任何变化？ 

## 集群详细信息
<a name="emr-troubleshoot-slow-1-cluster"></a>

 以下集群详细信息有助于追踪问题。有关如何收集此信息的更多信息，请参阅[查看 Amazon EMR 集群状态和详细信息](emr-manage-view-clusters.md)。
+  集群的标识符。（也称为工作流标识符。） 
+  AWS 区域 以及集群启动时进入的可用区。
+  集群的状态，包括上次状态更改的详细信息。
+  为主节点、核心节点和任务节点指定的 EC2 实例的类型和数量。

# 步骤 2：检查 EMR 集群环境
<a name="emr-troubleshoot-slow-2"></a>

检查您的环境以查看是否存在服务中断或是否已超过 AWS 服务限制。

**Topics**
+ [检查服务中断](#emr-troubleshoot-slow-2-outages)
+ [检查使用限制](#emr-troubleshoot-slow-2-limits)
+ [检查 Amazon VPC 子网配置](#emr-troubleshoot-slow-2-vpc)
+ [重启集群](#emr-troubleshoot-slow-2-restart)

## 检查服务中断
<a name="emr-troubleshoot-slow-2-outages"></a>

 Amazon EMR 在内部使用多种 Amazon Web Services。它在 Amazon EC2 上运行虚拟服务器，在 Amazon S3 上存储数据和脚本，并向报告指标 CloudWatch。中断这些服务的事件很少见。但一旦发生，即可能会导致 Amazon EMR 出现问题。

 进一步操作之前，请检查 [Service Health Dashboard](https://status.aws.amazon.com/)。检查您启动集群的区域，以查看这些服务中是否存在中断事件。

## 检查使用限制
<a name="emr-troubleshoot-slow-2-limits"></a>

 如果您正在启动大型集群，同时启动了多个集群，或者您是 AWS 账户 与其他用户共享的用户，则集群可能因为超过 AWS 服务限制而失败。

 Amazon EC2 将单个 AWS 区域上运行的虚拟服务器实例的数量限制为 20 个按需实例或预留实例。如果您启动一个拥有 20 个以上节点的集群，或者启动的集群导致您的 AWS 账户 活动的 EC2 实例总数超过 20，则该集群将无法启动其所需的所有 EC2 实例，并且可能会失败。出现这种情况时，Amazon EMR 会返回 `EC2 QUOTA EXCEEDED` 错误。您可以通过提交 AWS 提高 Amazon EC2 实例[限制申请来请求增加可在您的账户上运行的 EC2 实例](https://aws.amazon.com/contact-us/ec2-request/)数量。

 可能导致您超出使用限制的另一件事是集群终止与释放其所有资源之间的延迟。根据配置差异，以前的集群可能需要 5-20 分钟的时间才能完全终止并释放分配的资源。如果您在尝试启动集群时收到 `EC2 QUOTA EXCEEDED` 错误，原因可能是最近终止的集群中的资源尚未释放。在这种情况下，您可以[请求增加您的 Amazon EC2 配额](https://aws.amazon.com/contact-us/ec2-request/)，也可以等待 20 分钟并重新启动集群。

 Amazon S3 将在账户上创建的存储桶数量限制为 100。如果您的集群创建的新存储桶超过此限制，则存储桶创建将失败，并可能导致集群失败。

## 检查 Amazon VPC 子网配置
<a name="emr-troubleshoot-slow-2-vpc"></a>

如果您的集群是在 Amazon VPC 子网中启动的，则需要按照[在 VPC 中为 Amazon EMR 配置联网](emr-plan-vpc-subnet.md)中所述配置子网。此外，请检查您启动集群的子网是否有足够的空闲弹性 IP 地址，以便为集群中的每个节点分配一个。

## 重启集群
<a name="emr-troubleshoot-slow-2-restart"></a>

 处理减速可能是由瞬变条件造成的。请考虑终止并重启该集群，看看性能是否有所改进。

# 步骤 3：检查 Amazon EMR 集群的日志文件
<a name="emr-troubleshoot-slow-3"></a>

 下一步是检查日志文件，以找到错误代码或集群遇到的问题的其它指示。有关可用日志文件、查找日志文件的位置以及如何查看这些日志文件的信息，请参阅[查看 Amazon EMR 日志文件](emr-manage-view-web-log-files.md)。

 可能需要进行一些调查工作才能确定发生了什么。Hadoop 在集群中的各个节点上运行任务尝试中的任务工作。Amazon EMR 可以启动推测性任务尝试，终止未首先完成的其它任务尝试。这会生成重要的活动，并记录到控制器，stderr 和 syslog 日志文件中。此外，多个任务尝试同时运行，但一个日志文件只能线性显示结果。

 首先检查引导操作日志，查看集群启动期间的错误或意外配置更改。从那里查看步骤日志，以确定作为错误步骤的一部分启动的 Hadoop 任务。检查 Hadoop 任务日志以确定失败的任务尝试。任务尝试日志将包含导致任务尝试失败的详细信息。

以下部分说明如何使用各种日志文件识别集群中的错误。

## 检查引导操作日志
<a name="emr-troubleshoot-slow-3-bootstrap-logs"></a>

 引导操作会在集群启动时运行脚本。它们通常用于在集群上安装附加软件或更改默认值的配置设置。检查这些日志可以深入了解集群设置期间发生的错误以及可能影响性能的配置设置更改。

## 检查步骤日志
<a name="emr-troubleshoot-slow-3-step-logs"></a>

 步骤日志有四种类型。
+ **控制器：**包含由 Amazon EMR（Amazon EMR）生成的文件，这些文件由尝试运行您的步骤时遇到的错误引起。如果您的步骤在加载时失败，您可以在此日志中找到堆栈跟踪。此处通常描述加载或访问您的应用程序的错误，以及缺少映射器文件错误。
+  **stderr** 包含处理步骤时发生的错误消息。此处通常介绍应用程序加载错误。此日志有时包含堆栈跟踪。
+ **stdout：**包含由映射器和折叠器（reducer）可执行文件生成的状态。此处通常介绍应用程序加载错误。此日志有时包含应用程序错误消息。
+ **syslog：**包含来自非 Amazon 软件（例如 Apache 和 Hadoop）的日志。流式传输错误通常在此处进行描述。

 检查 stderr 是否有明显的错误。如果 stderr 显示一个简短的错误列表，则该步骤会快速停止并引发错误。这通常由集群中运行的映射器和折叠器（reducer）应用程序中的错误引起。

 检查控制器和 syslog 的最后一行是否有错误或故障通知。注意有关失败任务的任何通知，特别是显示“Job Failed (任务失败)”的时候。

## 检查任务尝试日志
<a name="emr-troubleshoot-slow-3-task-logs"></a>

 如果在前面对步骤日志的分析中发现了一个或多个失败的任务，请调查相应任务尝试的日志，以获得更详细的错误信息。

## 检查 Hadoop 守护进程日志
<a name="emr-troubleshoot-slow-3-hadoop-logs"></a>

 在极少数情况下，Hadoop 本身可能会失败。要查看是否是这种情况，您必须查看 Hadoop 日志。它们位于每个节点的 `/var/log/hadoop/` 处。

 您可以使用 JobTracker 日志将失败的任务尝试映射到运行该任务的节点。知道与任务尝试关联的节点后，您即可以检查托管该节点的 EC2 实例的运行状况，以查看是否存在任何问题（例如 CPU 或内存不足）。

# 步骤 4：检查 Amazon EMR 集群和实例运行状况
<a name="emr-troubleshoot-slow-4"></a>

 Amazon EMR 集群由正在 Amazon EC2 实例上运行的节点组成。如果那些实例受到资源约束 (如耗尽 CPU 或内存)。遇到网络连接问题，或遭到终止，集群处理的速度会受到影响。

 集群中最多有三种类型的节点：
+  **主节点**：管理集群。如果主节点遇到性能问题，整个集群都会受到影响。
+  **核心节点**：处理 map-reduce 任务并维护 Hadoop 分布式文件系统（HDFS）。如果这些节点之一遇到了性能问题，就会降低 HDFS 操作和 map-reduce 处理的速度。您可以向集群添加其它核心节点以改进性能，但无法移除核心节点。有关更多信息，请参阅[手动调整正在运行的 Amazon EMR 集群的大小](emr-manage-resize.md)。
+  **任务节点**：处理 map-reduce 任务。这些纯粹是计算资源，并不存储数据。您可以向集群添加任务节点，提高性能速度，或移除不需要的任务节点。有关更多信息，请参阅[手动调整正在运行的 Amazon EMR 集群的大小](emr-manage-resize.md)。

 当您查看集群的运行状况时，应该既查看整个集群的性能，又查看各个实例的性能。您可以使用以下多种工具：

## 使用检查集群运行状况 CloudWatch
<a name="emr-troubleshoot-slow-4-cw"></a>

 每个 Amazon EMR 集群都会向其报告指标。 CloudWatch这些指标提供集群的概括性性能信息，如总负载、HDFS 使用率、正在运行的任务、其余任务、损坏的数据块等。查看这些 CloudWatch 指标可以让你大致了解集群的情况，并可以深入了解导致处理速度减慢的原因。除了使用 CloudWatch 分析现有性能问题外，您还可以设置警报，以便在将 CloudWatch 来出现性能问题时发出警报。有关更多信息，请参阅 [使用监控 Amazon EMR 指标 CloudWatch](UsingEMR_ViewingMetrics.md)。

## 检查任务状态和 HDFS 运行状况
<a name="emr-troubleshoot-slow-4-web-ui"></a>

使用集群详细信息页面上的 **Application user interfaces (应用程序用户界面)** 选项卡可查看 YARN 应用程序详细信息。对于某些应用程序，您可以深入了解更多详细信息和直接访问日志。这对 Spark 应用程序特别有用。有关更多信息，请参阅[查看 Amazon EMR 应用程序历史记录](emr-cluster-application-history.md)。

Hadoop 向您提供可用于查看信息的一系列 Web 界面。有关如何访问这些 Web 界面的详细信息，请参见 [查看 Amazon EMR 集群上托管的 Web 界面](emr-web-interfaces.md)。
+  JobTracker — 提供有关集群正在处理的作业进度的信息。您可以使用此界面确定作业陷入困境的时间。
+  HDFS NameNode — 提供有关 HDFS 利用率百分比和每个节点上的可用空间的信息。您可以使用此界面确定 HDFS 受到资源约束和需要其它容量的时间。
+  TaskTracker — 提供有关群集正在处理的作业的任务的信息。您可以使用此界面确定任务陷入困境的时间。

## 使用 Amazon EC2 查看实例运行状况
<a name="emr-troubleshoot-slow-4-ec2"></a>

 另一种查找集群中实例状态信息的方法是使用 Amazon EC2 控制台。因为集群中的每个节点在 EC2 实例上运行，您可以使用 Amazon EC2 提供的工具检查它们的状态。有关更多信息，请参阅[查看 Amazon EC2 中的集群实例](UsingEMR_Tagging.md)。

# 步骤 5：检查已暂停的组
<a name="emr-troubleshoot-slow-5"></a>

 如果尝试启动节点时遇到太多错误，实例组就会进入暂停状态。例如，如果新节点在执行引导操作时反复失败，实例组将在一段时间后进入 `SUSPENDED` 状态，而不是继续尝试供应新节点。

 在以下情况中，节点可能无法出现：
+ Hadoop 或该集群不知是何原因损坏，不接受新节点进入集群
+ 新节点的引导操作失败
+ 该节点无法正常工作，未能签入 Hadoop

如果实例组处于 `SUSPENDED` 状态，集群处于 `WAITING` 状态，您可以添加一个集群步骤，以重置所需核心节点和任务节点的数量。添加该步骤可恢复集群的处理，使实例组重回 `RUNNING` 状态。

有关如何重置暂停状态下的集群的详细信息，请参阅[“暂停”状态](emr-manage-resize.md#emr-manage-resizeSuspended)。

# 步骤 6：查看 Amazon EMR 集群的配置设置
<a name="emr-troubleshoot-slow-6"></a>

 配置设置指定集群如何运行的详细信息，例如，重试任务的次数和排序可用的内存大小。当使用 Amazon EMR 启动集群时，除了标准 Hadoop 配置设置外，还有 Amazon EMR 特定的设置。这些配置设置存储在集群的主节点上。您可以检查配置设置，以确保集群有所需的资源高效运行。

 Amazon EMR 定义用于启动集群的默认 Hadoop 配置设置。这些值基于 AMI 和您为该集群指定的实例类型。您可以使用引导操作或在作业执行参数中指定新值，从而修改配置设置的默认值。有关更多信息，请参阅[创建引导操作以使用 Amazon EMR 集群安装其他软件](emr-plan-bootstrap.md)。为了确定引导操作是否更改了配置设置，请检查引导操作日志。

 Amazon EMR 记录用于执行每次任务的 Hadoop 设置。日志数据存储在主节点`/mnt/var/log/hadoop/history/`目录`job_job-id_conf.xml`下名为的文件中，其中替换*job-id*为作业的标识符。如果您启用了日志存档，则这些数据将复制到`logs/date/jobflow-id/jobs`文件夹 Amazon S3 中，其中*date*是任务运行的日期，*jobflow-id*也是集群的标识符。

 以下 Hadoop 作业配置设置对于调查性能问题尤其有用。有关 Hadoop 配置设置及它们如何影响 Hadoop 操作的详细信息，请转到 [http://hadoop.apache.org/docs/](http://hadoop.apache.org/docs/)。

**警告**  
如果单个节点出现故障，则在少于四个节点的集群上将 `dfs.replication` 设置为 1 可能会导致 HDFS 数据丢失。建议您使用具有至少四个核心节点的集群来处理生产工作负载。
Amazon EMR 不允许集群扩展 `dfs.replication` 下方的核心节点。例如，如果是 `dfs.replication = 2`，则最小核心节点数为 2。
当您使用托管扩缩、自动扩缩或选择手动调整集群大小时，建议您将设置 `dfs.replication` 为 2 或更高。


| 配置设置 | 说明 | 
| --- | --- | 
| dfs.replication | 为了形成类似 RAID 的环境而接收复制的单个数据块 (类似于硬盘数据块) 的 HDFS 节点的数量。确定包含该数据块副本的 HDFS 节点的数量。 | 
| io.sort.mb | 排序可用的总内存大小。此值应该是 10x io.sort.factor。此设置也可用于计算任务节点所用的总内存大小，计算方法是 io.sort.mb 与 mapred.tasktracker.ap.tasks.maximum 相乘。 | 
| io.sort.spill.percent | 供排序期间使用，在该点将开始使用磁盘，因为分配的排序内存已满。 | 
| mapred.child.java.opts | 已淘汰。使用 mapred.map.child.java.opts 和 mapred.reduce.child.java.opts。启动 JVM 时 TaskTracker 使用的 Java 选项，以便在其中执行任务。通用参数是“-Xmx”，设置最大的内存大小。 | 
| mapred.map.child.java.opts | 启动 JVM 时 TaskTracker 使用的 Java 选项，以便在其中执行地图任务。通用参数是“-Xmx”，设置最大的内存堆大小。 | 
| mapred.map.tasks.speculative.execution | 确定同一任务的映射任务尝试是否可以并行启动。 | 
| mapred.reduce.tasks.speculative.execution | 确定同一任务的 reduce 任务尝试是否可以并行启动。 | 
| mapred.map.max.attempts | 可以尝试映射任务的最大次数。如果所有尝试都失败，那么该映射任务可标记为“失败”。 | 
| mapred.reduce.child.java.opts | 启动 JVM 时 TaskTracker 使用的 Java 选项，以便在其中执行简化任务。通用参数是“-Xmx”，设置最大的内存堆大小。 | 
| mapred.reduce.max.attempts | 可以尝试 reduce 任务的最大次数。如果所有尝试都失败，那么该映射任务可标记为“失败”。 | 
| mapred.reduce.slowstart.completed.maps | 尝试 reduce 任务前应该完成的映射任务量。不等待足够长的时间可能会造成在尝试中出现“Too many fetch-failure”错误。 | 
| mapred.reuse.jvm.num.tasks | 一个任务在单个 JVM 中运行。指定可以重新使用相同 JVM 的任务数。 | 
| mapred.tasktracker.map.tasks.maximum | 映射期间每个任务节点可并行执行的任务的最大数量。 | 
| mapred.tasktracker.reduce.tasks.maximum | 化简期间每个任务节点可并行执行的任务的最大数量。 | 

 如果您的集群任务需要使用大量内存，您可以通过在每个核心节点使用较少的任务以及降低作业跟踪程序堆大小来增强性能。

# 步骤 7：检查 Amazon EMR 集群的输入数据
<a name="emr-troubleshoot-slow-7"></a>

 请查看您的输入数据。它是否在键值之间均匀分配？ 如果您的数据严重偏向一个或几个键值，那么可能将处理负载映射到少量节点，而其它节点则闲置。工作的不均衡分配可能会导致处理速度较慢。

 不平衡数据集的示例是，依据按字母顺序排列的词运行集群，但有一个数据集仅包含以字母“a”开始的词。当工作被映射时，以“a”开始的节点处理值会过量，而以其它字母开始的节点处理词会处于闲置状态。

# 解决将 Amazon EMR 与 Lake Formation 配合 AWS 使用时的常见问题
<a name="emr-troubleshoot-lf"></a>

 本部分向您介绍在将 Amazon EMR 与 AWS Lake Formation结合使用时对常见问题进行故障排查的过程。

## 不允许访问数据湖
<a name="emr-troubleshoot-lf-data-access"></a>

您必须明确选择在 Amazon EMR 集群上进行数据筛选，然后才能分析和处理数据湖中的数据。当数据访问失败时，您将在 Notebook 条目的输出中看到一条通用 `Access is not allowed` 消息。

要选择并允许在 Amazon EMR 上进行数据筛选，请参阅《AWS Lake Formation 开发人员指南》**中的[允许在 Amazon EMR 上进行数据筛选](https://docs.aws.amazon.com/lake-formation/latest/dg/getting-started-setup.html#emr-switch)以获取说明。

## 会话过期
<a name="emr-troubleshoot-lf-expiration"></a>

EMR Notebooks 和 Zeppelin 的会话超时由 Lake Formation 的 IAM 角色的 `Maximum CLI/API session duration` 设置控制。此设置的默认值为 1 小时。如果出现会话超时，在尝试返回 Spark SQL 命令时，您将在 Notebook 条目的输出中看到下列消息。

```
Error 401    HTTP ERROR: 401 Problem accessing /sessions/2/statements. 
Reason:  JWT token included in request failed validation. 
Powered by Jetty:// 9.3.24.v20180605   org.springframework.web.client.HttpClientErrorException: 401 JWT token included in request failed validation…
```

要验证您的会话，请刷新页面。系统将提示您使用 IdP 重新进行身份验证并将重定向回 Notebook。重新进行身份验证后，您可以继续运行查询。

## 用户在所请求表上没有权限
<a name="emr-troubleshoot-lf-no-permissisons"></a>

试图访问您没有访问权限的表时，在尝试运行 Spark SQL 命令时，您将在 Notebook 条目的输出中看到下列异常：

```
org.apache.spark.sql.AnalysisException: org.apache.hadoop.hive.ql.metadata.HiveException: Unable to fetch table table. 
Resource does not exist or requester is not authorized to access requested permissions. 
(Service: AWSGlue; Status Code: 400; Error Code: AccessDeniedException; Request ID: …
```

要访问该表，您必须通过在 Lake Formation 中更新与此表关联的权限，向用户授予访问权限。

## 查询与 Lake Formation 共享的跨账户数据
<a name="emr-troubleshoot-lf-cross-account"></a>

使用 Amazon EMR 从其他账户访问与您共享的数据时，某些 Spark 库会尝试调用 `Glue:GetUserDefinedFunctions` API 操作。由于 AWS RAM 托管权限的版本 1 和 2 不支持此操作，因此您会收到以下错误消息：

`"ERROR: User: arn:aws:sts::012345678901:assumed-role/my-spark-role/i-06ab8c2b59299508a is not authorized to perform: glue:GetUserDefinedFunctions on resource: arn:exampleCatalogResource because no resource-based policy allows the glue:GetUserDefinedFunctions action"`

要解决此错误，创建资源共享的数据湖管理员必须更新附加到资源共享的 AWS RAM 托管权限。托管权限的版本 3 AWS RAM 允许主体执行 `glue:GetUserDefinedFunctions` 操作。

如果您创建新的资源共享，Lake Formation 会默认应用最新版本的 AWS RAM 托管权限，您无需执行任何操作。要为现有资源共享启用跨账户数据访问权限，您需要将 AWS RAM 托管权限更新为版本 3。

您可以在中查看分配给与您共享的资源的 AWS RAM 权限 AWS RAM。版本 3 中包含以下权限：

```
Databases
  AWSRAMPermissionGlueDatabaseReadWriteForCatalog 
  AWSRAMPermissionGlueDatabaseReadWrite
    
Tables
  AWSRAMPermissionGlueTableReadWriteForCatalog
  AWSRAMPermissionGlueTableReadWriteForDatabase
    
AllTables
  AWSRAMPermissionGlueAllTablesReadWriteForCatalog
  AWSRAMPermissionGlueAllTablesReadWriteForDatabase
```

**更新现有资源共享的 AWS RAM 托管权限版本**  
您（数据湖管理员）可以按照*AWS RAM 用户指南*中的说明将[AWS RAM 托管权限更新到新版本](https://docs.aws.amazon.com/ram/latest/userguide/working-with-sharing-update-permissions.html)，也可以撤消资源类型的所有现有权限并重新授予这些权限。如果您撤消权限，则 AWS RAM 会删除与该 AWS RAM 资源类型关联的资源共享。重新授予权限时， AWS RAM 会创建新的资源共享，并附上最新版本的 AWS RAM 托管权限。

## 插入、创建和变更表
<a name="emr-troubleshoot-lf-unsupported"></a>

不支持插入、创建和变更受 Lake Formation 策略保护的数据库中的表。如果执行这些操作，在尝试运行 Spark SQL 命令时，您会在 Notebook 条目的输出中看到下列异常。

```
java.io.IOException: com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Exception: 
            Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: …
```

有关更多信息，请参阅 [Amazon EMR 与集成的限制](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-lf-scope.html#emr-lf-limitations)。 AWS Lake Formation