Amazon EMR
管理指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

集群配置准则

使用此部分中的准则可帮助您决定要为 EMR 集群中的每个节点类型预配置的实例类型、购买选项和存储量。

您应使用哪个实例类型?

可以通过多种方式将 EC2 实例添加到集群,具体取决于您对集群使用的是实例组配置还是实例队列配置。

  • 实例组

    • 手动将同一类型的实例添加到现有的核心和任务实例组。

    • 手动添加任务实例组,该组可使用其他实例类型。

    • 在 Amazon EMR 中为实例组设置自动扩展,并根据您指定的 Amazon CloudWatch 指标值来自动添加和删除实例。有关更多信息,请参阅 扩展集群资源

  • 实例队列

    • 添加一个任务实例队列。

    • 对于现有的核心和任务实例队列,更改按需实例和 Spot 实例的目标容量。有关更多信息,请参阅 配置实例队列

规划集群实例的一个方法是,使用代表性的示例数据集运行测试集群并监控集群中节点的利用。有关更多信息,请参阅 查看和监控集群。另一种方法是计算您在考虑的实例的容量,并将该容量值与数据的大小做比较。

通常,分配任务的主节点类型不需要 EC2 实例和很高的处理能力;核心节点类型的 EC2 实例 (处理任务并将数据存储在 HDFS 中) 需要处理能力和存储容量;任务节点类型的 EC2 实例 (不存储数据) 只需要处理能力。有关可用的 EC2 实例及其配置的准则,请参阅计划和配置 EC2 实例

以下指导方针适用于大部分 Amazon EMR 集群。

  • 主节点没有大型计算需求。对于大多数包含 50 个或更少节点的集群,请考虑使用 m4.large 实例。对于节点数超过 50 的集群,请考虑使用 m4.xlarge。

  • 核心及任务节点的计算需求取决于您的应用程序将执行的处理类型。许多任务能够在 m4.large 实例类型上运行,该类型在 CPU、磁盘空间和输入/输出方面提供了均衡的性能。如果您的应用程序具有导致延迟的外部依赖项 (如收集数据的 Web 网络爬取),则您也许能够在实例等待依赖项完成时,在 t2.medium 实例上运行集群以降低成本。如想改进性能,请考虑使用核心及任务节点的 m4.xlarge 实例运行集群。如果集群的不同阶段有不同的容量需求,您可以开始使用少量核心节点,并随时增加或减少任务节点的数量来满足任务流程不断变化的容量要求。

  • 大多数 Amazon EMR 集群能在标准 EC2 实例类型 (如 m4.large 和 m4.xlarge) 上运行。计算密集型集群可能受益于在 CPU 增强型实例上运行,这些实例的 CPU 在比例上比 RAM 更高。数据库和内存缓存应用程序可能受益于在内存增强型实例上运行。网络密集型和 CPU 密集型应用程序 (像解析、NLP 和机器学习) 可能受益于在集群计算实例上运行,这些实例提供高比例的 CPU 资源和增强的网络性能。

  • 您可以处理的数据量取决于核心节点的容量以及作为输入的数据、处理期间的数据和作为输出的数据的大小。在处理期间,输入、中间和输出数据集都存储在集群上。

  • 默认情况下,您可以通过单个 AWS 账户运行的 EC2 实例总数为 20。这意味着您可以在集群中拥有的节点总数为 20。有关如何请求您的账户增加限值的详细信息,请参阅 AWS 限制

什么时候应该使用 Spot 实例?

有几种情况应使用 Spot 实例运行 Amazon EMR 群集。

长时间运行的集群和数据仓库

如果您运行的是持续性的、可预测计算容量变化的 Amazon EMR 集群,如数据仓库,就可以通过 Spot 实例以更低的成本处理峰值需求。您可以按需实例的方式启动您的主实例组和核心实例组来处理正常容量,并以 Spot 实例的方式启动任务实例组来处理您的峰值负载需求。

成本驱动型工作负载

如果您运行的是暂时性的群集,降低成本比完成时间更重要,且可以接受损失部分工作,那么,以 Spot 实例的方式运行整个群集 (主实例组、核心实例组和任务实例组) 可以享受最大的成本节约好处。

数据关键型工作负载

如果对于您运行的群集,降低成本比保证完成时间更为重要,但不能接受损失部分工作,则建议您以按需方式启动主实例组和核心实例组,并辅以采用 Spot 实例的一个或多个任务实例组。通过以按需方式运行主实例组和核心实例组,可以确保您的数据在 HDFS 上始终存在,且可保护群集不会因为竞价市场上的价格波动而终止,同时通过以 Spot 实例方式运行任务实例组而实现成本节约。

应用程序测试

当为生产环境做启动准备而测试新的应用程序时,您可以按 Spot 实例的方式运行整个群集 (主实例组、核心实例组和任务实例组)。从而降低测试成本。

选择按 Spot 实例方式启动的内容

在 Amazon EMR 中启动群集时,您可以选择以 Spot 实例方式启动任意或所有实例组 (主实例组、核心实例组和任务实例组)。因为每类实例组在群集中发挥的作用不同,所以,按 Spot 实例方式启动的每个实例组的意义也各不相同。

当以按需方式启动以 Spot 实例方式启动实例组时,您不能在执行群集的同时更改它的分类。要将按需实例组更改为 Spot 实例或者反向操作,您必须终止该集群,并启动一个新集群。

下表显示在各种应用程序中使用 Spot 实例的启动配置。

项目 主实例组 核心实例组 任务实例组
长时间运行集群 按需 按需或实例队列组合 Spot 或实例队列组合
成本驱动型工作负载 Spot 实例 Spot 实例 Spot 实例
数据关键型工作负载 按需 按需 Spot 或实例队列组合
应用程序测试 Spot 实例 Spot 实例 Spot 实例

作为 Spot 实例的主节点

主节点会控制和引导集群。当它终止时,群集也随之结束。因此,如果在您运行的群集中可以接受突然终止,那么,就只应当以 Spot 实例方式启动主节点。如果您在测试新的应用程序,或者您拥有的集群会定期地将数据保存到外部存储器 (如 Amazon S3)。或者在运行的集群中成本比确保集群完成更重要,就可能属于这种情况。

以 Spot 实例方式启动主实例组时,群集要到 Spot 实例请求实现后才启动。在您选择最高 Spot 价格时,请考虑这个因素。

启动群集时,只能添加 Spot 实例主节点。在正在运行的集群上,不能添加或移除主节点。

一般情况下,如果以 Spot 实例方式运行整个群集 (所有的实例组)。就只能以 Spot 实例方式运行主节点。

用作 Spot 实例的核心实例组

核心节点处理数据并使用 HDFS 存储信息。通常,仅当您没有运行任务节点,或正在以 Spot 实例方式运行任务节点时,才应以 Spot 实例方式运行核心节点。

当以 Spot 实例方式启动核心实例组时,Amazon EMR 会持续等候,直到可以在启动实例组前预配置所有已请求的核心实例。这意味着,如果您请求一个具有六个节点的核心实例组,但在您的最高 Spot 价格水平及该水平以下只能获得五个节点,那么,将不会启动该实例组。在这种情况下,Amazon EMR 将继续等候,直到您的 Spot 价格可以获得六个核心节点,或者直到您终止集群。

当您启动群集时,或者随后给正在运行的群集添加容量时,都可以添加 Spot 实例核心节点。无法通过减少实例计数来缩小正在运行的集群中的核心实例组大小。但是,可以使用 AWS CLI 或 API 终止核心实例组中的实例。应小心地执行此操作。终止核心实例组中的实例会带来数据丢失风险,不会自动替换该实例。

Spot 实例形式的任务实例组

任务节点处理数据,但不使用 HDFS 保存持久性数据。如果它们因为 Spot 价格上涨超过最高 Spot 价格而终止,那么不会丢失数据,对您的集群的影响会降低到最低程度。

当您以 Spot 实例的方式启动一个或多个任务实例组时,Amazon EMR 会预配置使用您的最高 Spot 价格所能获得的最多任务节点。这意味着,如果您请求一个具有六个节点的任务实例组,但在您的最高 Spot 价格水平及该水平以下只能获得五个 Spot 实例,那么 Amazon EMR 将使用五个节点启动该实例组,等到以后情况允许了再添加第六个。

以 Spot 实例方式启动任务实例组是在尽可能降低成本的同时扩展群集容量的一种策略。如果您以按需实例的方式启动主实例组和核心实例组,则可以为集群的运行提供容量保证。您可以根据需要向任务实例组添加任务实例,从而处理峰值流量或者加快数据处理速度。

可以使用控制台、AWS CLI 或 API 添加或删除任务节点。还可以添加更多任务组,但任务组一经创建将不可删除。

计算集群的必需的 HDFS 容量

可用于您的集群的 HDFS 存储量取决于以下因素:

  • 用于核心节点的 EC2 实例的数量。

  • 用于使用的实例类型的 EC2 实例存储的容量。有关实例存储卷的更多信息,请参阅 Amazon EC2 User Guide for Linux Instances 中的 Amazon EC2 实例存储

  • 附加到核心节点的 EBS 卷的数量和大小。

  • 一个重复因子,它将考虑每个数据块存储在 HDFS 中以实现类似 RAID 的冗余的方式。默认情况下,对于包含 10 个或更多核心节点的集群,重复因子为 3;对于包含 4-9 个核心节点的集群,重复因子为 2;对于包含 3 个或更少核心节点的集群,重复因子为 1。

要为每个核心节点计算集群的 HDFS 容量,请将实例存储卷容量添加到 EBS 存储容量 (如果已使用)。将结果乘以核心节点数,然后将乘积除以基于核心节点数确定的复制因子。例如,某个集群具有 10 个 i2.xlarge 类型的核心节点,这些节点具有 800 GB 的实例存储 (没有附加的 EBS 卷),该集群总共有约 2,666 GB 可用于 HDFS 的存储 (10 节点 x 800 GB ÷ 3 复制因子)。

如果计算出的 HDFS 容量值小于您的数据,则可通过以下方式增大 HDFS 存储量:

  • 创建带其他 EBS 卷的集群或将带附加的 EBS 卷的实例组添加到现有集群

  • 添加多个核心节点

  • 选择带更大存储容量的 EC2 实例类型

  • 使用数据压缩

  • 更改 Hadoop 配置设置以减小重复因子

减少重复因子的方法应谨慎使用,因为这会降低 HDFS 数据的冗余程度以及集群从丢失或损坏的 HDFS 数据块中恢复的能力。