

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

# 配置 Amazon EMR on EKS 的垂直自动扩展
<a name="jobruns-vas-configure"></a>

当你通过 API 提交 Amazon EMR Spark 任务时，你可以配置垂直自动扩展。[StartJobRun](https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_StartJobRun.html)按照 [使用垂直自动扩展功能提交 Spark 任务](jobruns-vas-gs.md#jobruns-vas-spark-submit) 中的示例所示，在 Spark 驱动程序 Pod 上设置与自动扩展相关的配置参数。

Amazon EMR on EKS 垂直自动扩展 Operator 会监听具有自动扩展功能的驱动程序 Pod，然后使用驱动程序 Pod 上的设置来设定与 Kubernetes Vertical Pod Autoscaler（VPA）的集成。这有助于对 Spark 执行程序 Pod 进行资源跟踪和自动扩展。

以下各节旨在介绍在为 Amazon EKS 集群配置垂直自动扩展时可以使用的参数。

**注意**  
将功能切换参数配置为标签，然后在 Spark 驱动程序 Pod 上将其余参数配置为注释。自动扩展参数属于 `emr-containers.amazonaws.com/` 域并且带有 `dynamic.sizing` 前缀。

## 必填参数
<a name="jobruns-vas-parameters-req"></a>

提交任务时，必须在 Spark 任务驱动程序中包含以下两个参数：


| Key | 说明 | 接受的值 | 默认 值 | Type | Spark 参数1 | 
| --- | --- | --- | --- | --- | --- | 
|  `dynamic.sizing`  |  功能切换  |  `true`, `false`  |  未设置  |  label  |  `spark.kubernetes.driver.label.emr-containers.amazonaws.com/dynamic.sizing`  | 
|  `dynamic.sizing.signature`  |  任务签名  |  *string*  |  未设置  |  注释  |  `spark.kubernetes.driver.annotation.emr-containers.amazonaws.com/dynamic.sizing.signature`  | 

1 在 `StartJobRun` API 中将此参数用作 `SparkSubmitParameter` 或 `ConfigurationOverride`。
+ **`dynamic.sizing`**：您可以使用 `dynamic.sizing` 标签来打开或关闭垂直自动扩展功能。要开启垂直自动扩展功能，请在 Spark 驱动程序 Pod 上将 `dynamic.sizing` 设置为 `true`。如果省略此标签或将其设置为 `true` 之外的任何值，则垂直自动扩展功能将关闭。
+ **`dynamic.sizing.signature`**：在驱动程序 Pod 上使用 `dynamic.sizing.signature` 注释设置任务签名。垂直自动扩展功能可汇总不同的 Amazon EMR Spark 任务运行的资源使用数据，从中得出资源建议。您要提供唯一标识符将任务关联在一起。

  
**注意**  
如果任务以固定间隔（例如每天或每周）重复出现，任务的每个新实例的任务签名都应保持不变。这可确保垂直自动扩展功能可以计算并汇总不同任务运行中的建议。

1 在 `StartJobRun` API 中将此参数用作 `SparkSubmitParameter` 或 `ConfigurationOverride`。

## 可选参数
<a name="jobruns-vas-parameters-opt"></a>

垂直自动扩展功能还支持以下可选参数。将这些参数设置为驱动程序 Pod 上的注释。


| Key | 说明 | 接受的值 | 默认 值 | Type | Spark 参数1 | 
| --- | --- | --- | --- | --- | --- | 
|  `dynamic.sizing.mode`  |  垂直自动扩展模式  |  `Off`, `Initial`, `Auto`  |  `Off`  |  注释  |  `spark.kubernetes.driver.annotation.emr-containers.amazonaws.com/dynamic.sizing.mode`  | 
|  `dynamic.sizing.scale.memory`  |  启用内存扩展  |  *`true`, `false`*  |  `true`  |  注释  |  `spark.kubernetes.driver.annotation.emr-containers.amazonaws.com/dynamic.sizing.scale.memory`  | 
|  `dynamic.sizing.scale.cpu`  |  开启或关闭 CPU 扩展  |  *`true`, `false`*  |  `false`  |  注释  |  `spark.kubernetes.driver.annotation.emr-containers.amazonaws.com/dynamic.sizing.scale.cpu`  | 
|  `dynamic.sizing.scale.memory.min`  |  内存扩展的最小限制  | 字符串，[K8s 资源数量](https://pkg.go.dev/k8s.io/apimachinery/pkg/api/resource#Quantity)，示例：1G |  未设置  |  注释  | spark.kubernetes.driver.annotation.emr-containers.amazonaws.com/dynamic.sizing.scale.memory.min | 
|  `dynamic.sizing.scale.memory.max`  |  内存扩展的最大限制  | 字符串，[K8s 资源数量](https://pkg.go.dev/k8s.io/apimachinery/pkg/api/resource#Quantity)，示例：4G |  未设置  |  注释  | spark.kubernetes.driver.annotation.emr-containers.amazonaws.com/dynamic.sizing.scale.memory.max | 
|  `dynamic.sizing.scale.cpu.min`  |  CPU 扩展的最小限制  | 字符串，[K8s 资源数量](https://pkg.go.dev/k8s.io/apimachinery/pkg/api/resource#Quantity)，示例：1 |  未设置  |  注释  | spark.kubernetes.driver.annotation.emr-containers.amazonaws.com/dynamic.sizing.scale.cpu.min | 
|  `dynamic.sizing.scale.cpu.max`  |  CPU 扩展的最大限制  | 字符串，[K8s 资源数量](https://pkg.go.dev/k8s.io/apimachinery/pkg/api/resource#Quantity)，示例：2 |  未设置  |  注释  | spark.kubernetes.driver.annotation.emr-containers.amazonaws.com/dynamic.sizing.scale.cpu.max | 

### 垂直自动扩展模式
<a name="jobruns-vas-parameters-opt-mode"></a>

`mode` 参数映射到 VPA 支持的不同自动扩展模式。使用驱动程序 Pod 上的 `dynamic.sizing.mode` 注释来设置模式。此参数支持下列值：
+ **关闭**：一种试运行模式，支持在其中监控建议，但不支持执行自动扩展。这是垂直自动扩展功能的默认模式。在这种模式下，关联的垂直 Pod Autoscaler 资源会对建议进行计算，您可以通过 kubectl、Prometheus 和 Grafana 等工具监控建议。
+ **初始**：在此模式下，如果根据任务的历史运行情况（例如重复任务）提供建议，VPA 会在任务开始时自动扩展资源。
+ **自动**：在此模式下，VPA 会驱逐 Spark 执行程序 Pod，并在 Spark 驱动程序 Pod 重启时使用推荐的资源设置自动扩展这些 Pod。有时，VPA 会驱逐正在运行的 Spark 执行程序 Pod；因此，重试中断的执行程序可能会导致额外延迟。

### 资源扩展
<a name="jobruns-vas-parameters-opt-rs"></a>

在设置垂直自动扩展功能时，您可以选择是否扩展 CPU 和内存资源。将 `dynamic.sizing.scale.cpu` 和 `dynamic.sizing.scale.memory` 注释设置为 `true` 或 `false`。默认情况下，CPU 扩展设置为 `false`，内存扩展设置为 `true`。

### 资源最小值和最大值（边界）
<a name="jobruns-vas-parameters-opt-bounds"></a>

您也可以选择设置 CPU 和内存资源的边界。启用自动扩展功能时，请使用 `dynamic.sizing.[memory/cpu].[min/max]` 注释为这些资源选择最小值和最大值。默认情况下，资源没有限制。将注释设置为表示 Kubernetes 资源数量的字符串值。例如，将 `dynamic.sizing.memory.max` 设置为 `4G` 来表示 4GB。