在 Amazon EMR 中使用 EMR 托管扩展 - Amazon EMR

在 Amazon EMR 中使用 EMR 托管扩展

重要

我们强烈建议您使用最新的 Amazon EMR 版本来进行托管扩展。在以前的 Amazon EMR 版本中,您可能会遇到间歇性的应用程序故障或扩展延迟。此问题已在 Amazon EMR 5.30.2、5.31.1、5.32.1、5.33.1 和 6.0.1、6.1.1、6.2.1、6.3.1 中得到修复。

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

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

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

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

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

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

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

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

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

功能历史记录

本节列出了最近对 Amazon EMR 托管式扩展功能的更新以及包含此更新的发布版本。

托管式扩展功能历史记录
发行日期 功能 Amazon EMR 版本
2022 年 3 月 21 日 添加了在缩减集群时使用的 Spark 随机排序数据感知。对于启用了 Apache Spark 和托管式扩展功能的 Amazon EMR 集群,Amazon EMR 会持续监控 Spark 执行程序和中间随机排序数据位置。利用这些信息,Amazon EMR 只能缩减不包含积极使用的随机排序数据的未充分利用的实例。这可以防止重新计算丢失的随机排序数据,从而有助于降低成本和提高任务性能。有关更多信息,请参阅 Spark Programming Guide(Spark 编程指南)。 5.34.0 及更高版本,6.4.0 及更高版本

注意事项和限制

  • 要使用托管式扩展,指标收集器进程必须能够连接到公有 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: []

    有关在节点停用期间 Amazon EMR 如何与 YARN 拒绝列出集成的更多详细信息

    可以拒绝列出 Amazon EMR 中的节点的情况

    配置 Spark 节点停用行为

  • 过度使用 EBS 卷可能会导致托管扩展问题。我们建议您将 EBS 卷的利用率保持在 90% 以下。请参阅 指定额外的 EBS 存储卷

  • EMR 托管式扩展目前已在 22 个 AWS 区域推出:美国东部(弗吉尼亚北部和俄亥俄)、美国西部(俄勒冈和加利福尼亚北部)、南美洲(圣保罗)、欧洲(法兰克福、爱尔兰、伦敦、米兰、巴黎和斯德哥尔摩)、加拿大(中部)、亚太地区(香港、孟买、首尔、新加坡、悉尼和东京)、中东(巴林)、非洲(开普敦)、AWS GovCloud (US-East)、AWS GovCloud (US-West)、中国(北京,由光环新网运营)和中国(宁夏,由西云数据运营)。

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

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

    作为解决方法,即使您的任务不需要 Presto,也请在创建集群时将 Presto 选择为要安装的应用程序。

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

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

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

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

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