扩展集群容量 -

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

扩展集群容量

如果您的作业耗时过长,但执行程序消耗了足够的资源,而且 Spark 创建的任务量相对于可用核心数而言过大,可以考虑扩展集群容量。要评测这是否合适,请使用以下指标。

CloudWatch 指标

  • 检查 CPU 负载内存利用率,以确定执行程序是否消耗了足够的资源。

  • 检查作业运行了多长时间,以评测处理时间是否过长而无法实现您的性能目标。

在以下示例中,四个执行程序在 CPU 负载超过 97% 的情况下运行但大约三个小时后处理仍未完成。

""
注意

如果 CPU 负载较低,您可能无法从扩展集群容量中受益。

火花用户界面

作业选项卡或阶段选项卡上,您可以看到每个作业或阶段的任务数。在以下示例中,Spark 创建了 58100 个任务。

所有作业的阶段,显示一个阶段和 58100 个任务。

执行程序选项卡上,您可以看到执行程序和任务的总数。在以下屏幕截图中,每个 Spark 执行程序有四个核心,可以同时执行四个任务。

显示“核心”列的执行程序表。

在此示例中,Spark 任务数 58100) 远大于执行程序可以同时处理的 16 个任务(4 个执行程序 × 4 个核心)。

如果您发现此类迹象,请考虑扩展集群。您可以使用以下选项扩展集群容量:

  • 启用 AWS Glue Auto Sc aling — 在 3.0 或更高 AWS Glue 版本中,A uto Scaling 可用于 AWS Glue 提取、转换和加载 (ETL) 以及流式处理作业。 AWS Glue 根据每个阶段的分区数量或作业运行时生成微批量的速率,自动在集群中添加和移除工作程序。

    如果您发现即使启用了自动扩缩功能,Worker 数量也不会增加,请考虑手动添加 Worker。但是,请注意,手动扩展一个阶段可能会导致许多 Worker 在后期阶段处于闲置状态,造成成本增加而性能提升为零的情况。

    启用 Auto Scaling 后,你可以在执行者指标中看到 CloudWatch 执行者的数量。使用以下指标来监控 Spark 应用程序中对执行程序的需求:

    • glue.driver.ExecutorAllocationManager.executors.numberAllExecutors

    • glue.driver.ExecutorAllocationManager.executors.numberMaxNeededExecutors

    有关指标的更多信息,请参阅AWS Glue 使用 Amazon CloudWatch 指标进行监控

  • 横向扩展:增加 AWS Glue Worker 的数量:您可以手动增加 AWS Glue Worker 的数量。仅添加 Worker,直到发现闲置 Worker。此时,增加更多 Worker 将增加成本,而不会改善结果。有关更多信息,请参阅并行处理任务

  • 向上扩展:使用更大的工作器类型 — 您可以手动更改 AWS Glue 工作程序的实例类型,以使用具有更多内核、内存和存储空间的工作程序。较大的 Worker 类型使您可以垂直扩缩和运行密集型数据集成作业,例如内存密集型数据转换、偏斜聚合以及涉及 PB 级数据的实体检测检查。

    纵向扩展还有助于解决 Spark 驱动程序需要更大容量的情况,例如,作业查询计划非常大时。有关工作人员类型和绩效的更多信息,请参阅 AWS 大数据博客文章使用新的大型工作器 AWS Glue 类型 G.4X 和 G.8X 来扩展 Apache Spark 作业

    使用较大的 Worker 还可以减少所需的 Worker 总数,从而减少联接等密集型操作中的随机排序,从而提升性能。