

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

# 扩展集群容量
<a name="scale-cluster-capacity"></a>

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

## CloudWatch 指标
<a name="scaling-metrics"></a>
+ 检查 **CPU 负载**和**内存利用率**，以确定执行程序是否消耗了足够的资源。
+ 检查作业运行了多长时间，以评测处理时间是否过长而无法实现您的性能目标。

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



![""](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/tuning-aws-glue-for-apache-spark/images/cpu-metrics.png)


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

## 火花用户界面
<a name="scaling-spark"></a>

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



![所有作业的阶段，显示一个阶段和 58100 个任务。](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/tuning-aws-glue-for-apache-spark/images/stages-for-all-jobs.png)


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



![显示“核心”列的执行程序表。](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/tuning-aws-glue-for-apache-spark/images/executors-tab-cores.png)


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

如果您发现此类迹象，请考虑扩展集群。您可以使用以下选项扩展集群容量：
+ **启用 AWS Glue Auto Sc** [aling — 在 3.0 或更高 AWS Glue 版本中，A](https://docs.aws.amazon.com/glue/latest/dg/auto-scaling.html) 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 指标进行监控](https://docs.aws.amazon.com/glue/latest/dg/monitoring-awsglue-with-cloudwatch-metrics.html)。
+ **横向扩展：增加 AWS Glue Worker 的数量**：您可以手动增加 AWS Glue Worker 的数量。仅添加 Worker，直到发现闲置 Worker。此时，增加更多 Worker 将增加成本，而不会改善结果。有关更多信息，请参阅[并行处理任务](parallelize-tasks.md)。
+ **向上扩展：使用更大的工作器类型** — 您可以手动更改 AWS Glue 工作线程的实例类型，以使用具有更多内核、内存和存储空间的工作程序。较大的 Worker 类型使您可以垂直扩缩和运行密集型数据集成作业，例如内存密集型数据转换、偏斜聚合以及涉及 PB 级数据的实体检测检查。

  纵向扩展还有助于解决 Spark 驱动程序需要更大容量的情况，例如，作业查询计划非常大时。有关工作人员类型和绩效的更多信息，请参阅 AWS 大数据博客文章[使用新的大型工作器 AWS Glue 类型 G.4X 和 G.8X 来扩展 Apache Spark 作业](https://aws.amazon.com/blogs/big-data/scale-your-aws-glue-for-apache-spark-jobs-with-new-larger-worker-types-g-4x-and-g-8x/)。

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