在 Amazon EMR 中使用托管扩展 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

在 Amazon EMR 中使用托管扩展

重要

我们强烈建议您使用最新的 Amazon EMR 发行版(Amazon EMR 6.14.0)来进行托管式自动扩缩。在某些早期的发行版中,您可能会遇到间歇性的应用程序故障或扩展延迟。Amazon EMR 已通过 5.x 发行版 5.30.2、5.31.1、5.32.1、5.33.1 及更高版本,以及 6.x 发行版 6.1.1、6.2.1、6.3.1 及更高版本解决了此问题。有关区域和发行版可用性的更多信息,请参阅 托管式自动扩缩功能的可用性

概述

使用 Amazon EMR 版本 5.30.0 及更高版本(Amazon EMR 6.0.0 除外),您可以启用 Amazon EMR 托管式自动扩缩功能。托管扩展让您根据工作负载自动增加或减少集群中实例或单元的数量。Amazon EMR 会持续评估集群指标,以便做出扩展决策,从而优化集群的成本和速度。托管扩展适用于由实例组或实例队列组成的集群。

托管式自动扩缩功能的可用性

  • 对于亚太地区(雅加达)区域,Amazon EMR 托管式自动扩缩功能现已在 Amazon EMR 6.14.0 及更高版本中推出。

  • 在下列 Amazon Web Services 区域,Amazon EMR 5.30.0 和 6.1.0 及更高版本提供了 Amazon EMR 托管式自动扩缩功能:

    美国东部(弗吉尼亚州北部和俄亥俄州)、美国西部(俄勒冈州和加利福尼亚州北部)、南美洲(圣保罗)、欧洲地区(法兰克福、爱尔兰、伦敦、米兰、巴黎和斯德哥尔摩)、加拿大(中部)、亚太地区(香港、孟买、首尔、新加坡、悉尼和东京)、中东(巴林)、非洲(开普敦)、Amazon GovCloud(美国东部)、Amazon GovCloud(美国西部)、中国(北京,由光环新网运营)和中国(宁夏,由西云数据运营)。

  • Amazon EMR 托管扩展仅适用于 YARN 应用程序,如 Spark、Hadoop、Hive 和 Flink。不支持非基于 YARN 的应用程序,如 Presto 和 HBase。

托管扩展参数

您必须为托管扩展配置以下参数。该限制仅适用于核心节点和任务节点。初始配置后,无法扩展主节点。

  • Minimum (最小)MinimumCapacityUnits)– 集群中允许的 EC2 容量的下限。其衡量方式为通过虚拟中央处理单位(vCPU)核心或实例组中的实例进行衡量。其衡量方式为通过实例集单位进行衡量。

  • Maximum (最大)MaximumCapacityUnits)– 集群中允许的 EC2 容量的上限。其衡量方式为通过虚拟中央处理单位(vCPU)核心或实例组中的实例进行衡量。其衡量方式为通过实例集单位进行衡量。

  • On-Demand limit (按需限制)MaximumOnDemandCapacityUnits)(可选)– 集群中按需市场类型允许的 EC2 容量的上限。如果未指定此参数,则默认为 MaximumCapacityUnits 的值。

    • 此参数用于在按需实例和竞价型实例之间拆分容量分配。例如,如果您将最小参数设置为 2 个实例,最大参数设置为 100 个实例,按需限制设置为 10 个实例,则 Amazon EMR 托管扩展将纵向扩展到 10 个按需型实例,并将剩余容量分配给竞价型实例。有关更多信息,请参阅节点分配方案

  • Maximum core nodes (最大核心节点)MaximumCoreCapacityUnits)(可选)– 集群中核心节点类型允许的 EC2 容量的上限。如果未指定此参数,则默认为 MaximumCapacityUnits 的值。

    • 此参数用于在核心节点和任务节点之间分配容量。例如,如果您将最小参数设置为 2 个实例,最大参数设置为 100 个实例,最大核心节点设置为 17 个实例,则 Amazon EMR 托管扩展将纵向扩展到 17 个核心节点,并将剩余的 83 个实例分配给任务节点。有关更多信息,请参阅节点分配方案

有关托管式扩展参数的更多信息,请参阅 ComputeLimits

Amazon EMR 托管式自动扩缩功能注意事项

  • 仅少数 Amazon Web Services 区域和 Amazon EMR 发行版支持托管式自动扩缩功能。有关更多信息,请参阅托管式自动扩缩功能的可用性

  • 您必须为 Amazon EMR 托管扩展配置所需参数。有关更多信息,请参阅托管扩展参数

  • 要使用托管式扩展,指标收集器进程必须能够连接到公有 API 端点,以便在 API Gateway 中进行托管式扩展。如果您通过 Amazon Virtual Private Cloud 使用私有 DNS 名称,托管式扩缩将无法正常运行。为确保托管式扩展正常运行,我们建议您执行以下操作之一:

  • 如果您的 YARN 作业在缩减过程中出现间歇性运行缓慢的情况,并且 YARN 资源管理器日志显示在此期间您的大多数节点都被列入拒绝列表,则可以调整停用超时阈值。

    spark.blacklist.decommissioning.timeout 从 1 小时减少到 1 分钟,以使节点可供其他待处理容器继续进行任务处理。

    您还应将 YARN.resourcemanager.nodemanager-graceful-decommission-timeout-secs 设置为更大的值,以确保当时间最长的“Spark 任务”仍在节点上运行时,Amazon EMR 不会强制终止该节点。当前默认值为 60 分钟,这意味着一旦节点进入停用状态,YARN 将在 60 分钟后强制终止容器。

    以下 YARN 资源管理器日志行示例显示了已添加到停用状态的节点:

    2021-10-20 15:55:26,994 INFO org.apache.hadoop.YARN.server.resourcemanager.DefaultAMSProcessor (IPC Server handler 37 on default port 8030): blacklist are updated in Scheduler.blacklistAdditions: [ip-10-10-27-207.us-west-2.compute.internal, ip-10-10-29-216.us-west-2.compute.internal, ip-10-10-31-13.us-west-2.compute.internal, ... , ip-10-10-30-77.us-west-2.compute.internal], blacklistRemovals: []

    查看 details on how Amazon EMR integrates with YARN deny listing during decommissioning of nodes(有关 Amazon EMR 如何在节点停用期间与 YARN 拒绝名单集成的详细信息)、拒绝列出的节点以及配置节点停用行为的更多信息。

  • 过度使用 EBS 卷可能会导致托管扩展问题。我们建议您将 EBS 卷的利用率保持在 90% 以下。有关更多信息,请参阅实例存储

  • Amazon CloudWatch 指标对于 Amazon EMR 托管扩展的运行至关重要。我们建议您密切监控 Amazon CloudWatch 指标,以确保数据不会丢失。有关如何配置 CloudWatch 告警以检测缺失指标的更多信息,请参阅使用 Amazon CloudWatch 告警

  • 在未安装 Presto 的 5.30.0 和 5.30.1 的集群上进行托管扩展操作可能会导致应用程序故障或导致统一的实例组或实例集处于 ARRESTED 状态,尤其是在缩减操作之后快速执行扩展操作时。

    解决方法是即使您的任务不需要 Presto,也可以在使用 Amazon EMR 发行版 5.30.0 和 5.30.1 创建集群时,将 Presto 选为要安装的应用程序。

  • 在为 Amazon EMR 托管扩展设置最大核心节点和按需限制时,请考虑实例组和实例集之间的差异。每个实例组包含相同的实例类型和相同的实例购买选项:按需或 Spot。对于每个实例集,您可以指定最多 5 个实例类型,这些类型可预配置为按需实例和竞价型实例。有关更多信息,请参阅使用集或统一实例组创建集群集选项节点分配方案

  • 对于 Amazon EMR 5.30.0 及更高版本,如果您移除主安全组默认的允许所有出站规则 0.0.0.0/,则必须添加一条规则,以允许与您的安全组建立出站 TCP 连接,从而在端口 9443 上访问服务。您的服务访问安全组应允许来自主安全组端口 9443 上的入站 TCP 流量。有关配置安全组的更多信息,请参阅适用于主实例(私有子网)的 Amazon EMR 托管安全组

  • 托管扩展不支持 YARN 节点标签功能。避免在具有托管扩展的集群上使用节点标签。例如,不允许执行程序仅在任务节点上运行。当您在 Amazon EMR 集群中使用节点标签时,可能会发现集群没有向上扩展,这可能会导致应用程序运行缓慢。

  • 您可以使用 Amazon CloudFormation 配置 Amazon EMR 托管扩展。有关更多信息,请参阅《Amazon CloudFormation 用户指南》中的 AWS::EMR::Cluster

功能历史记录

此表列出了对 Amazon EMR 托管扩展功能的更新。

发行日期 能力 Amazon EMR 版本
2023 年 10 月 10 日 托管式自动扩缩功能已在 ap-southeast-3 亚太地区(雅加达)区域开放。 6.14.0 及更高版本
2023 年 7 月 28 日 增强了托管扩展,以便在 Amazon EMR 在纵向扩展当前实例组的过程中遇到延迟时,可以在纵向扩展时切换到不同的任务实例组。 5.34.0 及更高版本,6.4.0 及更高版本
2023 年 6 月 16 日 增强了托管扩展,以了解运行应用程序主节点的节点,这样这些节点就不会被缩减。有关更多信息,请参阅了解节点分配策略和方案 5.34.0 及更高版本,6.4.0 及更高版本
2022 年 3 月 21 日 添加了在缩减集群时使用的 Spark 随机排序数据感知。对于启用了 Apache Spark 和托管式扩展功能的 Amazon EMR 集群,Amazon EMR 会持续监控 Spark 执行程序和中间随机排序数据位置。利用这些信息,Amazon EMR 只能缩减不包含积极使用的随机排序数据的未充分利用的实例。这可以防止重新计算丢失的随机排序数据,从而有助于降低成本和提高任务性能。有关更多信息,请参阅 Spark Programming Guide(Spark 编程指南)。 5.34.0 及更高版本,6.4.0 及更高版本