

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

# 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 集群空间是否不足。