

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

# Amazon EMR 集群的可用区灵活性
<a name="emr-flexibility"></a>

每个 Amazon Web Services 区域 都有多个被称为可用区的隔离位置。当您启动实例时，可以选择指定您所用 Amazon Web Services 区域 中的可用区（AZ）。[可用区灵活性](#emr-flexibility-az)是指实例在多个可用区之间分布 AZs。如果一个实例发生故障，您可以设计您的应用程序，使另一个可用区中的实例可以处理请求。有关可用区的更多信息，请参阅《Amazon EC2 用户指南**》中的[区域和可用区](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-availability-zones)文档。

[实例灵活性](#emr-flexibility-types)是指使用多种实例类型来满足容量要求。使用实例表现灵活性时，可以跨实例大小、系列和代系使用总容量。与使用单一实例类型的集群相比，更大的灵活性有助于提高查找和分配所需计算容量的能力。

与具有单一实例类型或可用区的集群相比，实例和可用区灵活性能够减少[容量不足错误（ICE）](emr-events-response-insuff-capacity.md)和竞价型中断。在了解初始实例系列和大小后，请使用此处介绍的最佳实践来确定需要实现多样化的实例。这种方法可实现最低的性能和成本差异，同时最大限度提高 Amazon EC2 容量池的可用性。

## 灵活选择可用区
<a name="emr-flexibility-az"></a>

建议配置所有可用区以在虚拟私有云（VPC）中使用，并为 EMR 集群选择这些可用区。集群必须仅存在于一个可用区中，但通过 Amazon EMR 实例集，您可以为不同的可用区选择多个子网。当 Amazon EMR 启动集群时，它会在这些子网中查找您指定的实例和购买选项。当您为多个子网配置 EMR 集群时，与单个子网中的集群相比，您的集群可以访问更充足的 Amazon EC2 容量池。

如果您必须优先考虑一定数量的可用区，以便在 EMR 集群的虚拟私有云（VPC）中使用，则可以利用 Amazon EC2 的竞价型放置分数功能。使用竞价放置评分，您可以指定竞价型实例的计算要求，然后 EC2 会按照 1 到 10 的等级返回得分排名前十 Amazon Web Services 区域 的可用区。分数为 10 表示您的竞价型请求成功的可能性很大；分数为 1 表示您的竞价型请求不太可能成功。有关如何使用竞价型放置分数的更多信息，请参阅《Amazon EC2 用户指南》**中的[竞价型放置分数](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/spot-placement-score.html)。

## 灵活选择实例类型
<a name="emr-flexibility-types"></a>

实例灵活性是指使用多种实例类型来满足容量要求。实例灵活性有利于 Amazon EC2 竞价型实例和按需型实例的使用。借助竞价型实例，实例灵活性允许 Amazon EC2 使用实时容量数据从更充足的容量池启动实例。此外，实例灵活性还可以预测哪些实例的可用性最高，从而减少中断并降低工作负载的整体成本。借助按需型实例，当在更多的实例池中配置总容量时，实例灵活性可减少容量不足错误（ICE）。

对于 **Instance Group**（实例组）集群，最多可指定 50 个 EC2 实例类型。对于具有分配策略的 **Instance Fleets**（实例集），每个主节点组、核心节点组和任务节点组最多可指定 30 个 EC2 实例类型。实例范围越大，实例灵活性的优势就越多。

### 表现实例灵活性
<a name="emr-flexibility-express"></a>

请考虑以下最佳实践来表现应用程序的实例灵活性。

**Topics**
+ [确定实例系列和大小](#emr-flexibility-express-size)
+ [包含其他实例](#emr-flexibility-express-include)

#### 确定实例系列和大小
<a name="emr-flexibility-express-size"></a>

Amazon EMR 支持针对不同用例的多个实例类型。[Amazon EMR 支持的实例类型](emr-supported-instance-types.md) 文档中列出了这些实例类型。每个实例类型都属于一个实例系列，该系列描述了该类型针对哪些应用程序进行了优化。

对于新的工作负载，应该使用通用系列中的实例类型进行基准测试，例如 `m5` 或 `c5`。然后，从 Ganglia 和 Amazon CloudWatch 监控操作系统和 YARN 指标，以确定负载达到峰值时的系统瓶颈。瓶颈包括 CPU、内存、存储和 I/O 操作。确定瓶颈后，为实例类型选择计算优化、内存优化、存储优化或其他合适的实例系列。有关更多详细信息，请参阅 Amazon EMR 最佳实践指南中的 “[为你的 Spark 工作负载确定合适的基础架构](https://github.com/aws/aws-emr-best-practices/blob/main/website/docs/bestpractices/Applications/Spark/best_practices.md#bp-512-----determine-right-infrastructure-for-your-spark-workloads)” 页面。 GitHub

接下来，确定应用程序需要的最小 YARN 容器或 Spark 执行程序。这是适合容器的最小实例大小，也是集群的最小实例大小。使用此指标来确定可进一步实现多元化的实例。实例越小，实例灵活性就越高。

为了获得最大的实例灵活性，您应该利用尽可能多的实例。建议使用硬件规格相似的实例实现多元化。这可以最大限度地访问 EC2 容量池，同时将成本和性能差异降至最低。实现不同大小实例的多元化。为此，首先要确定 Amazon Graviton 和上一代实例的优先级。一般来说，对于每种工作负载，应在至少 15 种实例类型之间进行灵活选择。建议从通用型实例、计算优化型实例或内存优化型实例开始。这些实例类型的灵活性最大。

#### 包含其他实例
<a name="emr-flexibility-express-include"></a>

包含其他实例类型，以便最大限度地实现多元化。首先确定实例大小、Graviton 和代系灵活性的优先级。这将允许访问其他具有类似成本和性能配置的 EC2 容量池。如果由于 ICE 或竞价型实例中断而需要提高灵活性，请考虑变体和系列灵活性。每种方法都需要根据您的使用案例和要求进行权衡。
+ **大小灵活性**：首先，使用同系列不同大小的实例实现多元化。尽管同系列的实例成本和性能相同，但可以在每台主机上启动不同数量的容器。例如，如果所需的最小执行程序大小为 2vCPU 和 8Gb 内存，则最小实例大小为 `m5.xlarge`。为实现大小灵活性，请将 `m5.xlarge`、`m5.2xlarge`、`m5.4xlarge`、`m5.8xlarge`、`m5.12xlarge`、`m5.16xlarge` 和 `m5.24xlarge` 包含在内。
+ **Graviton 灵活性**：除大小外，您还可以通过 Graviton 实例实现多元化。Graviton 实例由 G Amazon raviton2 处理器提供支持，可为亚马逊 EC2 中的云工作负载提供最佳的性价比。例如，如果最小实例大小为 `m5.xlarge`，则可将 `m6g.xlarge`、`m6g.2xlarge`、`m6g.4xlarge`、`m6g.8xlarge` 和 `m6g.16xlarge` 包含在内，以确保实现 Graviton 的灵活性。
+ **代系灵活性**：与 Graviton 和大小灵活性类似，上一代系列中的实例具有相同的硬件规格。因此，成本和性能配置相似，同时增加了可访问的 Amazon EC2 池总量。为确保代系灵活性，请将 `m4.xlarge`、`m4.2xlarge`、`m4.10xlarge` 和 `m4.16xlarge` 包含在内。
+ **系列和变体灵活性**
  + **容量**：为了优化容量，建议在实例系列中灵活使用实例。来自不同实例系列的通用实例的实例池更充足，有助于满足容量要求。但是，实例系列不同，vCPU 与内存比率也有所不同。如果预期的应用程序容器大小适合不同的实例，会导致利用不足。例如，对于 `m5.xlarge`，可将计算优化型实例（如 `c5`）或内存优化型实例（如 `r5`）包含在内，以确保实例系列灵活性。
  + **成本**：为了优化成本，我们建议在不同变体之间灵活使用实例。这些实例的内存与 vCPU 比率与初始实例相同。变体灵活性的劣势在于，这些实例的容量池较小，可能导致额外容量受限或竞价型实例中断增加。例如对于 `m5.xlarge`，可将基于 AMD 的实例 (`m5a`)、基于 SSD 的实例 (`m5d`) 或网络优化实例 (`m5n`) 包含在内，以实现变体灵活性。