实例和可用区灵活性的最佳实践 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

实例和可用区灵活性的最佳实践

每个 Amazon Web Services 区域 都有多个相互隔离的位置,称为可用区。当您启动实例时,可以选择指定您所用 Amazon Web Services 区域 中的可用区(AZ)。可用区灵活性是指多个可用区中的实例分配。如果一个实例发生故障,您可以设计您的应用程序,使另一个可用区中的实例可以处理请求。有关可用区的更多信息,请参阅《Amazon EC2 用户指南》中的区域和可用区文档。

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

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

灵活选择可用区

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

如果您必须优先考虑一定数量的可用区,以便在 EMR 集群的虚拟私有云(VPC)中使用,则可以利用 Amazon EC2 的竞价型放置分数功能。使用竞价型放置评分,您可以指定竞价型实例的计算要求,然后 EC2 会按照 1 到 10 的等级返回得分排名前十的 Amazon Web Services 区域 或可用区。分数为 10 表示您的竞价型请求成功的可能性很大;分数为 1 表示您的竞价型请求不太可能成功。有关如何使用竞价放置分数的更多信息,请参阅《Amazon EC2 用户指南(适用于 Linux 实例)》中的竞价放置分数

灵活选择实例类型

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

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

表现实例灵活性

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

确定实例系列和大小

Amazon EMR 支持针对不同用例的多个实例类型。支持的实例类型 文档中列出了这些实例类型。每个实例类型都属于一个实例系列,该系列描述了该类型针对哪些应用程序进行了优化。

对于新的工作负载,应该使用通用系列中的实例类型进行基准测试,例如 m5c5。然后,从 Ganglia 和 Amazon CloudWatch 监控操作系统和 YARN 指标,以确定负载达到峰值时的系统瓶颈。瓶颈包括 CPU、内存、存储和 I/O 操作。确定瓶颈后,为实例类型选择计算优化、内存优化、存储优化或其他合适的实例系列。有关更多详细信息,请参阅 GitHub 上 Amazon EMR best practices guide(《Amazon EMR 最佳实践指南》)中的 Determine right infrastructure for your Spark workloads(为 Spark 工作负载确定合适的基础设施)页面。

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

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

包含其他实例

包含其他实例类型,以便最大限度地实现多元化。首先确定实例大小、Graviton 和代系灵活性的优先级。这将允许访问其他具有类似成本和性能配置的 EC2 容量池。如果由于 ICE 或竞价型实例中断而需要提高灵活性,请考虑变体和系列灵活性。每种方法都需要根据您的使用案例和要求进行权衡。

  • 大小灵活性:首先,使用同系列不同大小的实例实现多元化。尽管同系列的实例成本和性能相同,但可以在每台主机上启动不同数量的容器。例如,如果所需的最小执行程序大小为 2vCPU 和 8Gb 内存,则最小实例大小为 m5.xlarge。为实现大小灵活性,请将 m5.xlargem5.2xlargem5.4xlargem5.8xlargem5.12xlargem5.16xlargem5.24xlarge 包含在内。

  • Graviton 灵活性:除大小外,您还可以通过 Graviton 实例实现多元化。Graviton 实例由 Amazon Graviton2 处理器提供支持,可为 Amazon EC2 中的云工作负载提供最佳性价比。例如,如果最小实例大小为 m5.xlarge,则可将 m6g.xlargem6g.2xlargem6g.4xlargem6g.8xlargem6g.16xlarge 包含在内,以确保实现 Graviton 的灵活性。

  • 代系灵活性:与 Graviton 和大小灵活性类似,上一代系列中的实例具有相同的硬件规格。因此,成本和性能配置相似,同时增加了可访问的 Amazon EC2 池总量。为确保代系灵活性,请将 m4.xlargem4.2xlargem4.10xlargem4.16xlarge 包含在内。

  • 系列和变体灵活性

    • 容量:为了优化容量,建议在实例系列中灵活使用实例。来自不同实例系列的通用实例的实例池更充足,有助于满足容量要求。但是,实例系列不同,vCPU 与内存比率也有所不同。如果预期的应用程序容器大小适合不同的实例,会导致利用不足。例如,对于 m5.xlarge,可将计算优化型实例(如 c5)或内存优化型实例(如 r5)包含在内,以确保实例系列灵活性。

    • 成本:为了优化成本,我们建议在不同变体之间灵活使用实例。这些实例的内存与 vCPU 比率与初始实例相同。变体灵活性的劣势在于,这些实例的容量池较小,可能导致额外容量受限或竞价型实例中断增加。例如对于 m5.xlarge,可将基于 AMD 的实例 (m5a)、基于 SSD 的实例 (m5d) 或网络优化实例 (m5n) 包含在内,以实现变体灵活性。