

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Verwenden Sie vertikale Autoskalierung mit dem Spark-Operator für Amazon EMR auf EKS
<a name="spark-operator-vas"></a>

Ab Amazon EMR 7.0 können Sie Amazon EMR auf der vertikalen automatischen Skalierung von EKS verwenden, um das Ressourcenmanagement zu vereinfachen. Die Speicher- und CPU-Ressourcen werden automatisch an die Anforderungen der Workload angepasst, die Sie für Amazon-EMR-Spark-Anwendungen bereitstellen. Weitere Informationen finden Sie unter [Verwenden von vertikalem Auto Scaling mit Amazon-EMR-Spark-Aufträgen](jobruns-vas.md).

In diesem Abschnitt wird beschrieben, wie Sie den Spark-Operator für die Verwendung des vertikalen Auto Scalings konfigurieren.

## Voraussetzungen
<a name="spark-operator-vas-prereqs"></a>

Bevor Sie die Überwachung konfigurieren, stellen Sie sicher, dass Sie die folgenden Einrichtungsaufgaben abgeschlossen haben:
+ Führen Sie die Schritte unter [Einrichten des Spark-Operators für Amazon EMR in EKS](spark-operator-setup.md) aus.
+ (optional) Wenn Sie zuvor eine ältere Version des Spark-Operators installiert haben, löschen Sie die SparkApplication/ScheduledSparkApplication CRD.

  ```
  kubectl delete crd sparkApplication
  kubectl delete crd scheduledSparkApplication
  ```
+ Führen Sie die Schritte unter [Den Spark-Operator installieren](spark-operator-gs.md#spark-operator-install) aus. Fügen Sie in Schritt 3 dem Installationsbefehl die folgende Zeile hinzu, um Webhooks für den Operator zuzulassen:

  ```
  --set webhook.enable=true
  ```
+ Führen Sie die Schritte unter [Einrichten des vertikalen Auto Scalings für Amazon EMR in EKS](jobruns-vas-setup.md) aus.
+ Gewähren Sie Zugriff auf die Dateien an Ihrem Amazon S3 S3-Standort:

  1. Kommentieren Sie Ihr Fahrer- und Betreiber-Servicekonto mit dem`JobExecutionRole`, das über S3-Berechtigungen verfügt.

     ```
     kubectl annotate serviceaccount -n spark-operator emr-containers-sa-spark eks.amazonaws.com/role-arn=JobExecutionRole
     kubectl annotate serviceaccount -n spark-operator emr-containers-sa-spark-operator eks.amazonaws.com/role-arn=JobExecutionRole
     ```

  1. Aktualisieren Sie die Vertrauensrichtlinie Ihrer Jobausführungsrolle in diesem Namespace.

     ```
     aws emr-containers update-role-trust-policy \
     --cluster-name cluster \
     --namespace ${Namespace}\
     --role-name iam_role_name_for_job_execution
     ```

  1. Bearbeiten Sie die IAM-Rollen-Vertrauensrichtlinie Ihrer Jobausführungsrolle und aktualisieren Sie das Feld `serviceaccount` von bis`emr-containers-sa-spark-*-*-xxxx`. `emr-containers-sa-*`

     ```
     {
         "Effect": "Allow",
         "Principal": {
             "Federated": "OIDC-provider"
         },
         "Action": "sts:AssumeRoleWithWebIdentity",
         "Condition": {
             "StringLike": {
                 "OIDC": "system:serviceaccount:${Namespace}:emr-containers-sa-*"
             }
         }
     }
     ```

  1. Wenn Sie Amazon S3 als Dateispeicher verwenden, fügen Sie Ihrer Yaml-Datei die folgenden Standardeinstellungen hinzu.

     ```
     hadoopConf:
     # EMRFS filesystem
       fs.s3.customAWSCredentialsProvider: com.amazonaws.auth.WebIdentityTokenCredentialsProvider
       fs.s3.impl: com.amazon.ws.emr.hadoop.fs.EmrFileSystem
       fs.AbstractFileSystem.s3.impl: org.apache.hadoop.fs.s3.EMRFSDelegate
       fs.s3.buffer.dir: /mnt/s3
       fs.s3.getObject.initialSocketTimeoutMilliseconds: "2000"
       mapreduce.fileoutputcommitter.algorithm.version.emr_internal_use_only.EmrFileSystem: "2"
       mapreduce.fileoutputcommitter.cleanup-failures.ignored.emr_internal_use_only.EmrFileSystem: "true"
     sparkConf:
      # Required for EMR Runtime
      spark.driver.extraClassPath: /usr/lib/hadoop-lzo/lib/*:/usr/lib/hadoop/hadoop-aws.jar:/usr/share/aws/aws-java-sdk/*:/usr/share/aws/emr/emrfs/conf:/usr/share/aws/emr/emrfs/lib/*:/usr/share/aws/emr/emrfs/auxlib/*:/usr/share/aws/emr/security/conf:/usr/share/aws/emr/security/lib/*:/usr/share/aws/hmclient/lib/aws-glue-datacatalog-spark-client.jar:/usr/share/java/Hive-JSON-Serde/hive-openx-serde.jar:/usr/share/aws/sagemaker-spark-sdk/lib/sagemaker-spark-sdk.jar:/home/hadoop/extrajars/*
      spark.driver.extraLibraryPath: /usr/lib/hadoop/lib/native:/usr/lib/hadoop-lzo/lib/native:/docker/usr/lib/hadoop/lib/native:/docker/usr/lib/hadoop-lzo/lib/native
      spark.executor.extraClassPath: /usr/lib/hadoop-lzo/lib/*:/usr/lib/hadoop/hadoop-aws.jar:/usr/share/aws/aws-java-sdk/*:/usr/share/aws/emr/emrfs/conf:/usr/share/aws/emr/emrfs/lib/*:/usr/share/aws/emr/emrfs/auxlib/*:/usr/share/aws/emr/security/conf:/usr/share/aws/emr/security/lib/*:/usr/share/aws/hmclient/lib/aws-glue-datacatalog-spark-client.jar:/usr/share/java/Hive-JSON-Serde/hive-openx-serde.jar:/usr/share/aws/sagemaker-spark-sdk/lib/sagemaker-spark-sdk.jar:/home/hadoop/extrajars/*
      spark.executor.extraLibraryPath: /usr/lib/hadoop/lib/native:/usr/lib/hadoop-lzo/lib/native:/docker/usr/lib/hadoop/lib/native:/docker/usr/lib/hadoop-lzo/lib/native
     ```

## Einen Auftrag mit vertikalem Auto Scaling auf dem Spark-Operator ausführen
<a name="spark-operator-vas-run"></a>

Bevor Sie eine Spark-Anwendung mit dem Spark-Operator ausführen können, führen Sie die Schritte unter [Voraussetzungen](#spark-operator-vas-prereqs) durch. 

Um vertikales Autoscaling mit dem Spark-Operator zu verwenden, fügen Sie dem Treiber für Ihre Spark-Anwendungsspezifikation die folgende Konfiguration hinzu, um das vertikale Autoscaling zu aktivieren:

```
dynamicSizing:
  mode: Off
  signature: "my-signature"
```

Diese Konfiguration ermöglicht vertikales Autoscaling und ist eine erforderliche Signaturkonfiguration, mit der Sie eine Signatur für Ihren Job auswählen können.

Weitere Informationen zu den Konfigurationen und Parameterwerten finden Sie unter [Konfiguration der vertikalen Autoskalierung für Amazon EMR auf](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/jobruns-vas-configure.html) EKS. Standardmäßig wird Ihr Auftrag beim vertikalen Auto Scaling im Modus Nur für Überwachung **aus** gesendet. In diesem Überwachungsstatus können Sie Ressourcenempfehlungen berechnen und anzeigen, ohne ein Auto Scaling durchführen zu müssen. Weitere Informationen finden Sie unter [Vertikale Autoscaling-Modi](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/jobruns-vas-configure.html#jobruns-vas-parameters-opt-mode).

Im Folgenden finden Sie eine `SparkApplication` Beispieldefinitionsdatei `spark-pi.yaml` mit dem Namen der erforderlichen Konfigurationen für die Verwendung der vertikalen Autoskalierung.

```
apiVersion: "sparkoperator.k8s.io/v1beta2"
kind: SparkApplication
metadata:
  name: spark-pi
  namespace: spark-operator
spec:
  type: Scala
  mode: cluster
  image: "895885662937.dkr.ecr.us-west-2.amazonaws.com/spark/emr-7.12.0:latest"
  imagePullPolicy: Always
  mainClass: org.apache.spark.examples.SparkPi
  mainApplicationFile: "local:///usr/lib/spark/examples/jars/spark-examples.jar"
  sparkVersion: "3.4.1"
  dynamicSizing:
    mode: Off
    signature: "my-signature"
  restartPolicy:
    type: Never
  volumes:
    - name: "test-volume"
      hostPath:
        path: "/tmp"
        type: Directory
  driver:
    cores: 1
    coreLimit: "1200m"
    memory: "512m"
    labels:
      version: 3.4.1
    serviceAccount: emr-containers-sa-spark
    volumeMounts:
      - name: "test-volume"
        mountPath: "/tmp"
  executor:
    cores: 1
    instances: 1
    memory: "512m"
    labels:
      version: 3.4.1
    volumeMounts:
      - name: "test-volume"
        mountPath: "/tmp"
```

Senden Sie jetzt die Spark-Anwendung mit dem folgenden Befehl. Dadurch wird auch ein `SparkApplication`-Objekt mit dem `spark-pi`-Namen erstellt:

```
kubectl apply -f spark-pi.yaml
```

Weitere Informationen zum Einreichen von Anwendungen an Spark über den Spark-Operator finden Sie unter [Using a `SparkApplication`](https://www.kubeflow.org/docs/components/spark-operator/user-guide/using-sparkapplication/) in der `spark-on-k8s-operator` Dokumentation zu GitHub.

## Überprüfen der vertikalen Auto-Scaling-Funktionalität
<a name="spark-operator-vas-verify"></a>

Um zu überprüfen, ob das vertikale Auto Scaling für den eingereichten Auftrag korrekt funktioniert, rufen Sie mit kubectl die benutzerdefinierte `verticalpodautoscaler`-Ressource ab und sehen Sie sich Ihre Skalierungsempfehlungen an.

```
kubectl get verticalpodautoscalers --all-namespaces \ 
-l=emr-containers.amazonaws.com/dynamic.sizing.signature=my-signature
```

Die Ausgabe dieser Abfrage sollte wie folgt aussehen:

```
NAMESPACE        NAME                                                          MODE   CPU   MEM         PROVIDED   AGE
spark-operator   ds-p73j6mkosvc4xeb3gr7x4xol2bfcw5evqimzqojrlysvj3giozuq-vpa   Off          580026651   True       15m
```

Wenn Ihre Ausgabe nicht ähnlich aussieht oder einen Fehlercode enthält, finden Sie weitere Schritte zur Behebung des Problems in [Fehlerbehebung von Amazon EMR im vertikalen Auto Scaling von EKS](troubleshooting-vas.md).

Führen Sie den folgenden Befehl aus, um die Pods und Anwendungen zu entfernen:

```
kubectl delete sparkapplication spark-pi
```