

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

# 估算 Amazon EMR 集群容量
<a name="capacity"></a>

虽然 Amazon EMR 是一个可调整大小的平台，但请务必正确调整集群的大小。如果集群过小，适当调整大小可以避免集群运行缓慢；如果集群过大，则可以避免产生更高的成本。要预测这些问题，您可以计算工作负载所需的节点数量和类型。

## 主节点
<a name="coordinator"></a>

此类节点负责协调数据和进程的分配。如前所述，主节点的计算需求较低。您可以使用单个主节点来管理 Amazon EMR 集群。但是，您最多可以使用三个主节点，这样就不会出现单点故障。如果一个主节点发生故障，Amazon EMR 会失效转移到其他两个主节点之一。

## 核心节点和任务节点
<a name="core-task"></a>

核心节点和任务节点的区别在于，任务节点不存储数据；它们仅提供执行并行计算任务的能力。

要计算核心节点和任务节点的数量，必须了解数据大小和大致的内存使用量。

### 核心节点
<a name="core-nodes"></a>

核心节点负责运行任务来处理数据，并将数据存储在 Hadoop Distributed File System（HDFS）中。要计算核心节点的容量，请确定核心节点的数量，然后将节点数量乘以每个节点的 Amazon Elastic Block Store（Amazon EBS）存储空间。

例如，如果定义 10 个核心节点来处理 1 TiB 的数据，并且您的一个 `m5.xlarge` 实例类型的 Amazon EBS 存储空间为 64 GiB，则您将拥有 `10 nodes × 64 GiB`（即 640 GiB）的容量。由于 HDFS [复制因子](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-instances-guidelines.html)为 3，因此数据大小会在节点中复制 3 次，这样，1 TiB 的数据就需要 3 TiB 的容量。本示例只有 640 GiB，因此必须增加节点数量或更改实例类型，直到容量达到 3 TiB。

`m5.4xlarge` 实例类型的存储空间为 256 GiB。更改为 `m5.4xlarge` 实例类型并选择 12 个实例可提供足够的容量。

`12 instances × 256 GiB of storage = 3072 GiB = 3 TiB available`

### 任务节点
<a name="task-nodes"></a>

任务节点仅运行任务，不存储数据。要计算任务节点的数量，需要估算内存使用量。此容量可以分为核心节点和任务节点。要计算所需的任务节点数量，可从内存使用量中减去上一步中计算的核心节点所提供的内存。

要扩大内存范围，最佳做法是将所需的内存乘以 3。

假设您有 28 个进程，每个进程 20 GiB。

`3 × 28 processes × 20 GiB of memory = 1680 GiB of memory`

在本示例中，核心节点具有 64 GiB 内存（`m5.4xlarge` 实例）。因此，核心节点提供的总内存为：`64 GiB × 12 nodes = 768 GiB of memory`，但在本示例中这还不够。

要查明短缺量，请从所需的总内存中减去核心节点的内存。

`1680 GiB – 768 GiB core node memory = 912 GiB memory shortage`.

任务节点可以提供剩余的 912 GiB 内存。在本示例中，任务节点具有 32 GiB 内存（`m5.2xlarge` 实例）。要获得所需的任务节点数量，请将内存短缺量除以实例类型内存。

`912 GiB/32 GiB = 28.5 task nodes`

由于任务节点不得保留小数，因此需要四舍五入，故最多 29 个任务节点。