了解节点分配策略和方案 - Amazon EMR

了解节点分配策略和方案

本部分概述了可用于 Amazon EMR 托管扩展的节点分配策略和常见扩展方案。

节点分配策略

Amazon EMR 托管扩展基于以下纵向扩展和缩减策略分配核心节点和任务节点:

纵向扩展策略

  • Amazon EMR 托管扩展首先为核心节点添加容量,然后为任务节点添加容量,直到达到所允许的最大容量或直到实现所需的纵向扩展目标容量。

  • 当 Amazon EMR 在纵向扩展当前实例组的过程中遇到延迟时,使用托管式扩展的集群会自动切换到不同的任务实例组。

  • 如果设置了 MaximumCoreCapacityUnits 参数,则 Amazon EMR 会扩展核心节点,直到核心单位达到所允许的最大限制。所有剩余容量都添加到任务节点。

  • 如果设置了 MaximumOnDemandCapacityUnits 参数,则 Amazon EMR 使用按需型实例扩展集群,直到按需型单位达到所允许的最大限制。使用竞价型实例添加所有剩余容量。

  • 如果同时设置了 MaximumCoreCapacityUnitsMaximumOnDemandCapacityUnits 参数,Amazon EMR 在扩展期间会考虑这两个限制。

    例如,如果 MaximumCoreCapacityUnits 小于 MaximumOnDemandCapacityUnits,Amazon EMR 首先扩展核心节点,直到达到核心容量限制。对于剩余容量,Amazon EMR 首先使用按需型实例扩展任务节点,直到达到按需型限制,然后对任务节点使用竞价型实例。

缩减策略

  • Amazon EMR 5.34.0 及更高版本和 Amazon EMR 6.4.0 及更高版本支持可感知 Spark 随机排序数据(Spark 在分区之间重新分配以执行特定操作的数据)的托管式自动扩缩功能。有关随机排序操作的更多信息,请参阅 Spark 编程指南。托管式扩展仅缩减未充分利用且不包含积极使用的随机排序数据的实例。这种智能扩展可防止随机排序数据意外丢失,从而避免重新尝试任务和重新计算中间数据。

  • Amazon EMR 托管扩展首先删除任务节点,然后删除核心节点,直到实现所需的目标缩减容量。集群永远不会缩减到低于托管式扩展策略中的最小限制。

  • 在每个节点类型(核心节点或任务节点)中,Amazon EMR 托管扩展首先删除竞价型实例,然后删除按需型实例。

  • 对于使用 Amazon EMR 5.x 版本 5.34.0 及更高版本和 6.x 版本 6.4.0 及更高版本启动的集群,Amazon EMR 托管式自动扩缩功能不会缩减正在运行适用于 Apache Spark 的 ApplicationMaster 的节点。这样可以最大限度地减少任务失败和重试次数,这有助于提高作业性能并降低成本。要确认集群中哪些节点正在运行 ApplicationMaster,请访问 Spark 历史记录服务器,然后在 Spark 应用程序 ID 的执行程序选项卡下筛选驱动程序。

如果集群没有任何负载,Amazon EMR 将取消在之前评估中添加的新实例,并执行缩减操作 如果集群负载过重,Amazon EMR 会取消移除实例,并执行纵向扩展操作。

节点分配注意事项

我们建议您对核心节点使用按需型购买选项,以避免在竞价型实例回收时丢失 HDFS 数据。当更多竞价型实例添加到任务节点时,您可以使用任务节点的竞价型购买选项来降低成本并加快任务执行速度。

节点分配方案

您可以通过设置不同组合的最大、最小、按需限制和最大核心节点参数,根据您的需求创建各种扩展方案。

方案 1: 仅扩展核心节点

要仅扩展核心节点,托管式扩展参数必须满足以下要求:

  • 按需限制等于最大边界。

  • 最大核心节点等于最大边界。

当未指定按需限制和最大核心节点参数时,这两个参数都默认为最大边界。

以下示例仅演示了扩展核心节点的方案。

集群初始状态 扩展参数 扩展行为

实例组

核心:1 个按需型

任务:1 个按需型和 1 个竞价型

UnitType: Instances

MinimumCapacityUnits:1

MaximumCapacityUnits:20

MaximumOnDemandCapacityUnits:20

MaximumCoreCapacityUnits:20

使用按需型在核心节点上扩展 1 到 20 个实例或实例集单元。在任务节点上没有扩展。

实例机群

核心:1 个按需型

任务:1 个按需型和 1 个竞价型

UnitType: InstanceFleetUnits

MinimumCapacityUnits:1

MaximumCapacityUnits:20

MaximumOnDemandCapacityUnits:20

MaximumCoreCapacityUnits:20

方案 2:仅扩展任务节点

要仅扩展任务节点,托管扩展参数必须满足以下要求:

  • 最大核心节点必须等于最小边界。

以下示例仅演示了扩展任务节点的方案。

集群初始状态 扩展参数 扩展行为

实例组

核心:2 个按需型

任务:1 个竞价型

UnitType: Instances

MinimumCapacityUnits:2

MaximumCapacityUnits:20

MaximumCoreCapacityUnits:2

保持核心节点稳定在 2 个,并且仅在 0 到 18 个实例或实例集单位之间扩展任务节点。最小边界和最大边界之间的容量仅添加到任务节点。

实例机群

核心:2 个按需型

任务:1 个竞价型

UnitType:InstanceFleetUnits

MinimumCapacityUnits:2

MaximumCapacityUnits:20

MaximumCoreCapacityUnits:2

方案 3:集群中仅有按需型实例

要仅拥有按需型实例,您的集群和托管扩展参数必须满足以下要求:

  • 按需限制等于最大边界。

    当未指定按需限制时,参数值默认为最大边界。默认值表示 Amazon EMR 仅扩展按需型实例。

如果最大核心节点小于最大边界,则可以使用最大核心节点参数来分配核心节点和任务节点之间的容量。

要在由实例组组成的集群中启用此方案,集群中的所有节点组必须在初始配置期间使用按需市场类型。

以下示例演示了在整个集群中使用按需型实例的方案。

集群初始状态 扩展参数 扩展行为

实例组

核心:1 个按需型

任务:1 个按需

UnitType: Instances

MinimumCapacityUnits:1

MaximumCapacityUnits:20

MaximumOnDemandCapacityUnits:20

MaximumCoreCapacityUnits:12

使用按需类型在核心节点上扩展 1 到 12 个实例或实例集单位。在任务节点上使用按需扩展剩余容量。不使用竞价型实例进行扩展。

实例机群

核心:1 个按需型

任务:1 个按需

UnitType:InstanceFleetUnits

MinimumCapacityUnits:1

MaximumCapacityUnits:20

MaximumOnDemandCapacityUnits:20

MaximumCoreCapacityUnits:12

方案 4: 集群中只有竞价型实例

要仅拥有竞价型实例,托管扩展参数必须满足以下要求:

  • 按需限制设置为 0。

如果最大核心节点小于最大边界,则可以使用最大核心节点参数来分配核心节点和任务节点之间的容量。

要在由实例组组成的集群中启用此方案,核心实例组必须在初始配置期间使用竞价型购买选项。如果任务实例组中没有竞价型实例,则 Amazon EMR 托管扩展会在需要时使用竞价型实例创建任务组。

以下示例演示了在整个集群中使用竞价型实例的方案。

集群初始状态 扩展参数 扩展行为

实例组

核心:1 个 Spot

任务:1 个竞价型

UnitType: Instances

MinimumCapacityUnits:1

MaximumCapacityUnits:20

MaximumOnDemandCapacityUnits:0

使用 Spot 在核心节点上扩展 1 到 20 个实例或实例集单位。不使用按需类型进行扩展。

实例机群

核心:1 个 Spot

任务:1 个竞价型

UnitType:InstanceFleetUnits

MinimumCapacityUnits:1

MaximumCapacityUnits:20

MaximumOnDemandCapacityUnits:0

方案 5:在核心节点上扩展按需型实例,在任务节点上扩展 Spot 实例

要在核心节点上扩展按需型实例和在任务节点上扩展 Spot 实例,托管扩展参数必须满足以下要求:

  • 按需限制必须等于最大核心节点。

  • 按需限制和最大核心节点必须小于最大边界。

要在由实例组组成的集群中启用此方案,核心节点组必须使用按需购买选项。

以下示例演示了在核心节点上扩展按需型实例和在任务节点上扩展竞价型实例的方案。

集群初始状态 扩展参数 扩展行为

实例组

核心:1 个按需型

任务:1 个按需型和 1 个竞价型

UnitType: Instances

MinimumCapacityUnits:1

MaximumCapacityUnits:20

MaximumOnDemandCapacityUnits:7

MaximumCoreCapacityUnits:7

由于任务节点上已有 1 个按需单位且按需最大限制为 7,请在核心节点上纵向扩展到 6 个按需单位。。然后在任务节点上纵向扩展到 13 个竞价型单位。

实例机群

核心:1 个按需型

任务:1 个按需型和 1 个竞价型

UnitType:InstanceFleetUnits

MinimumCapacityUnits:1

MaximumCapacityUnits:20

MaximumOnDemandCapacityUnits:7

MaximumCoreCapacityUnits:7