本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
估算 Amazon EMR 集群容量
Amazon EMR 是一个可调整大小的平台,而正确调整集群大小非常重要。如果集群过小,适当调整大小可以避免集群运行缓慢;如果集群过大,则可以避免产生更高的成本。要预测这些问题,您可以计算工作负载所需的节点数量和类型。
主节点
此类节点负责协调分配数据和进程。如前所述,主节点的计算需求较低。您可以使用单个主节点来管理 Amazon EMR 集群。但是,您最多可以使用三个主节点,这样就不会出现单点故障。如果一个主节点发生故障,Amazon EMR 会失效转移到其他两个主节点之一。
核心节点和任务节点
核心节点和任务节点的区别在于,任务节点不存储数据;它们仅提供执行并行计算任务的能力。
要计算核心节点和任务节点的数量,必须了解数据大小和大致的内存使用量。
核心节点
核心节点负责运行任务来处理数据,并将数据存储在 Hadoop Distributed File System(HDFS)中。要计算核心节点的容量,请定义核心节点的数量,然后将节点数量乘以每个节点的 Amazon Elastic Block Store(Amazon EBS)存储空间。
例如,如果定义 10 个核心节点来处理 1TiB 的数据,并且 m5.xlarge
实例类型的 Amazon EBS 存储空间为 64GiB,则将拥有 10 nodes × 64 GiB
,即 640GiB 容量。由于 HDFS 复制因子为 3,数据大小会在节点中复制 3 次,因此 1TiB 的数据需要 3TiB 的容量。本示例只有 640GiB,因此必须增加节点数量或更改实例类型,直到容量达到 3TiB。
m5.4xlarge
实例类型的存储空间为 256GiB。更改为 m5.4xlarge
实例类型并选择 12 个实例可提供足够的容量。
12 instances × 256 GiB of storage = 3072 GiB = 3 TiB
available
任务节点
任务节点仅运行任务,不存储数据。要计算任务节点的数量,需要估算内存使用量。此容量可以分为核心节点和任务节点。要计算所需的任务节点数量,可从内存使用量中减去上一步中计算的核心节点所提供的内存。
要扩大内存范围,最佳做法是将所需的内存乘以 3。
假设您有 28 个进程,每个进程 20GiB。
3 × 28 processes × 20 GiB of memory = 1680 GiB of
memory
在本示例中,核心节点具有 64GiB 内存(m5.4xlarge
实例)。因此,核心节点提供的总内存为:64 GiB × 12 nodes = 768 GiB of
memory
,但在本示例中这还不够。
要查明短缺量,请从所需的总内存中减去核心节点的内存。
1680 GiB – 768 GiB core node memory = 912 GiB memory shortage
.
任务节点可以提供剩余的 912GiB 内存。在本示例中,任务节点具有 32GiB 内存(m5.2xlarge
实例)。要获得所需的任务节点数量,请将内存短缺量除以实例类型内存。
912 GiB/32 GiB = 28.5 task nodes
由于任务节点不得保留小数,因此需要四舍五入,故最多 29 个任务节点。