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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

亚马逊 EMR 的高级扩展

从 7.0 EC2 版本的 Amazon EMR 开始,您可以利用高级扩展来控制集群的资源利用率。高级扩展引入了利用率-性能量表,用于根据业务需求调整资源利用率和性能级别。您设置的值决定了您的集群是更多地考虑资源节约还是向上扩展以处理 service-level-agreement (SLA) 敏感的工作负载,其中快速完成至关重要。调整缩放值后,托管扩展会解释您的意图并智能地扩展以优化资源。有关托管扩展的更多信息,请参阅为 Amazon EMR 配置托管扩展

高级缩放设置

您为高级扩展设置的值可根据您的要求优化您的集群。值的范围介于 1-100 之间。可能的值为 1255075100。如果将索引设置为这些值以外的值,则会导致验证错误。

缩放值映射到资源利用策略。以下列表定义了其中的几个:

  • 利用率优化 [1]-此设置可防止资源过度配置。如果要保持较低的成本并优先考虑高效的资源利用率,请使用较低的值。它会使集群不那么积极地向上扩展。这对于经常出现工作负载峰值并且您不希望资源过快增加的用例非常有效。

  • 平衡 [50]-这可以平衡资源利用率和工作绩效。此设置适用于大多数阶段运行时间稳定的稳定工作负载。它还适用于混合了短期和长时间运行阶段的工作负载。如果您不确定要选择哪个设置,我们建议您从此设置开始。

  • 性能优化 [100]-此策略优先考虑性能。集群会积极扩展,以确保任务快速完成并达到性能目标。性能优化适用于对快速运行时间至关重要的 service-level-agreement (SLA) 敏感型工作负载。

注意

可用的中间值提供了策略之间的中间位置,以便微调集群的高级扩展行为。

高级缩放的好处

由于您的环境和要求各不相同,例如不断变化的数据量、成本目标调整和 SLA 实施,因此集群扩展可以帮助您调整集群配置以实现目标。主要优势包括:

  • 增强的精细控制 — 引入利用率-性能设置使您可以根据需要轻松调整集群的扩展行为。您可以根据自己的使用模式向上扩展以满足对计算资源的需求,也可以向下扩展以节省资源。

  • 改善成本优化-您可以根据需求选择低利用率值,以便更轻松地实现成本目标。

优化入门

设置和配置

使用这些步骤来设置性能指数并优化您的扩展策略。

  1. 以下命令使用利用率优化的[1]扩展策略更新现有集群:

    aws emr put-managed-scaling-policy --cluster-id 'cluster-id' \ --managed-scaling-policy '{ "ComputeLimits": { "UnitType": "Instances", "MinimumCapacityUnits": 1, "MaximumCapacityUnits": 2, "MaximumOnDemandCapacityUnits": 2, "MaximumCoreCapacityUnits": 2 }, "ScalingStrategy": "ADVANCED", "UtilizationPerformanceIndex": "1" }' \ --region "region-name"

    ScalingStrategy性和UtilizationPerformanceIndex是新增的,与缩放优化相关。您可以通过在托管扩展策略中为UtilizationPerformanceIndex属性设置相应的值(1、25、50、75 和 100)来选择不同的扩展策略。

  2. 要恢复到默认的托管缩放策略,put-managed-scaling-policy请在不包含ScalingStrategyUtilizationPerformanceIndex属性的情况下运行该命令。(这是可选的。) 此示例显示了如何执行此操作:

    aws emr put-managed-scaling-policy \ --cluster-id 'cluster-id' \ --managed-scaling-policy '{"ComputeLimits":{"UnitType":"Instances","MinimumCapacityUnits":1,"MaximumCapacityUnits":2,"MaximumOnDemandCapacityUnits":2,"MaximumCoreCapacityUnits":2}}' \ --region "region-name"

使用监控指标来跟踪集群利用率

从 EMR 7.3.0 版本开始,Amazon EMR 发布了四个与内存和虚拟 CPU 相关的新指标。您可以使用它们来衡量跨扩展策略的集群利用率。这些指标适用于任何用例,但您可以使用此处提供的详细信息来监控 Advanced Scaling。

可用的有用指标包括以下内容:

  • YarnContainersUsedMemoryGBSeconds— 由 YARN 管理的应用程序消耗的内存量。

  • YarnContainersTotalMemoryGBSeconds— 集群内分配给 YARN 的总内存容量。

  • YarnNodesUsedVCPUSeconds— 由 YARN 管理的每个应用程序的 VCPU 总秒数。

  • YarnNodesTotalVCPUSeconds— 消耗的内存总计 VCPU 秒数,包括 yarn 未准备就绪的时间窗口。

您可以使用 Logs Insight Amazon CloudWatch s 分析资源指标。功能包括专门构建的查询语言,可帮助您提取特定于资源使用和扩展的指标。

以下查询可以在 Amazon CloudWatch 控制台中运行,它使用度量数学计算平均内存利用率 (e1),方法是将消耗内存的运行总和 (e2) 除以总内存的运行总和 (e3):

{ "metrics": [ [ { "expression": "e2/e3", "label": "Average Mem Utilization", "id": "e1", "yAxis": "right" } ], [ { "expression": "RUNNING_SUM(m1)", "label": "RunningTotal-YarnContainersUsedMemoryGBSeconds", "id": "e2", "visible": false } ], [ { "expression": "RUNNING_SUM(m2)", "label": "RunningTotal-YarnContainersTotalMemoryGBSeconds", "id": "e3", "visible": false } ], [ "AWS_EMR_ManagedResize", "YarnContainersUsedMemoryGBSeconds", "ACCOUNT_ID", "793684541905", "COMPONENT", "ManagerService", "JOB_FLOW_ID", "cluster-id", { "id": "m1", "label": "YarnContainersUsedMemoryGBSeconds" } ], [ ".", "YarnContainersTotalMemoryGBSeconds", ".", ".", ".", ".", ".", ".", { "id": "m2", "label": "YarnContainersTotalMemoryGBSeconds" } ] ], "view": "timeSeries", "stacked": false, "region": "region", "period": 60, "stat": "Sum", "title": "Memory Utilization" }

要查询日志,可以在 Amazon 控制台 CloudWatch 中选择。有关为编写查询的更多信息 CloudWatch,请参阅 Amazon Logs 用户指南中的使用 Lo CloudWatch gs Insights 分析 CloudWatch 日志数据

下图显示了示例集群的这些指标:

显示利用率统计数据的图表。

注意事项和限制

  • 扩展策略的有效性可能会有所不同,具体取决于您的独特工作负载特征和集群配置。我们鼓励您尝试缩放设置,以确定适合您用例的最佳索引值。

  • Amazon EMR 高级扩展特别适合批处理工作负载。对于 SQL/数据仓库和流式处理工作负载,我们建议使用默认的托管扩展策略以获得最佳性能。

  • 与默认的托管扩展策略相比,性能优化的扩展策略能够在更长的时间内保持高计算资源,从而更快地执行任务。此模式优先考虑快速扩展以满足资源需求,从而更快地完成任务。与默认策略相比,这可能会导致更高的成本。

  • 如果集群已经过优化并得到充分利用,则启用高级扩展可能不会带来额外的好处。在某些情况下,启用高级扩展可能会导致成本增加,因为工作负载的运行时间可能会更长。在这些情况下,我们建议使用默认的托管扩展策略,以确保最佳的资源分配和成本效益。

  • 在托管扩展的背景下,随着执行时间的推移,随着设置从性能优化 [100] 调整为利用率优化 [1],重点转移到资源利用率上。但是,需要注意的是,根据工作负载的性质和集群的拓扑结构,结果可能会有所不同。为了确保您的用例获得最佳结果,我们强烈建议使用您的工作负载测试扩展策略,以确定最合适的设置。

  • PerformanceUtilizationIndex接受以下值:

    • 1

    • 25

    • 50

    • 75

    • 100

    提交的任何其他值都会导致验证错误。