扩展集群容量
如果您的作业耗时过长,但执行程序消耗了足够的资源,而且 Spark 创建的任务量相对于可用核心数而言过大,可以考虑扩展集群容量。要评测这是否合适,请使用以下指标。
CloudWatch 指标
-
检查 CPU 负载和内存利用率,以确定执行程序是否消耗了足够的资源。
-
检查作业运行了多长时间,以评测处理时间是否过长而无法实现您的性能目标。
在以下示例中,四个执行程序在 CPU 负载超过 97% 的情况下运行,但大约三个小时后处理仍未完成。
注意
如果 CPU 负载较低,您可能无法从扩展集群容量中受益。
Spark UI
在作业选项卡或阶段选项卡上,您可以看到每个作业或阶段的任务数。在以下示例中,Spark 创建了 58100 个任务。
在执行程序选项卡上,您可以看到执行程序和任务的总数。在以下屏幕截图中,每个 Spark 执行程序有四个核心,可以同时执行四个任务。
在此示例中,Spark 任务数 58100) 远大于执行程序可以同时处理的 16 个任务(4 个执行程序 × 4 个核心)。
如果您发现此类迹象,请考虑扩展集群。您可以使用以下选项扩展集群容量:
-
启用 AWS Glue Auto Scaling:在 AWS Glue 3.0 或更高版本中,可提供自动扩缩功能用于 AWS Glue 提取、转换、加载(ETL)以及流作业。AWS Glue 将根据各个阶段的分区数量或作业运行时生成微批处理的速率,自动向集群添加和移除 Worker。
如果您发现即使启用了自动扩缩功能,Worker 数量也不会增加,请考虑手动添加 Worker。但是,请注意,手动扩展一个阶段可能会导致许多 Worker 在后期阶段处于闲置状态,造成成本增加而性能提升为零的情况。
启用自动扩缩功能后,您可以在 CloudWatch 执行程序指标中看到执行程序的数量。使用以下指标来监控 Spark 应用程序中对执行程序的需求:
-
glue.driver.ExecutorAllocationManager.executors.numberAllExecutors -
glue.driver.ExecutorAllocationManager.executors.numberMaxNeededExecutors
有关指标的更多信息,请参阅使用 Amazon CloudWatch 指标监控 AWS Glue。
-
-
横向扩展:增加 AWS Glue Worker 的数量:您可以手动增加 AWS Glue Worker 的数量。仅添加 Worker,直到发现闲置 Worker。此时,增加更多 Worker 将增加成本,而不会改善结果。有关更多信息,请参阅并行处理任务。
-
纵向扩展:使用更大的 Worker 类型:您可以手动更改 AWS Glue Worker 的实例类型,以使用具有更多核心、内存和存储空间的 Worker。较大的 Worker 类型使您可以垂直扩缩和运行密集型数据集成作业,例如内存密集型数据转换、偏斜聚合以及涉及 PB 级数据的实体检测检查。
纵向扩展还有助于解决 Spark 驱动程序需要更大容量的情况,例如,作业查询计划非常大时。有关 Worker 类型和性能的更多信息,请参阅 AWS 大数据博客文章 Scale your AWS Glue for Apache Spark jobs with new larger worker types G.4X and G.8X
。 使用较大的 Worker 还可以减少所需的 Worker 总数,从而减少联接等密集型操作中的随机排序,从而提升性能。