

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Usa la scalabilità automatica verticale con l'operatore Spark per Amazon EMR su EKS
<a name="spark-operator-vas"></a>

A partire da Amazon EMR 7.0, puoi utilizzare Amazon EMR su scalabilità automatica verticale EKS per semplificare la gestione delle risorse. Ottimizza in automatico le risorse di memoria e CPU per adattarle alle esigenze del carico di lavoro fornito per le applicazioni Spark di Amazon EMR. Per ulteriori informazioni, consulta [Uso del dimensionamento automatico verticale con i processi Spark di Amazon EMR](jobruns-vas.md).

Questa sezione descrive come configurare l'operatore Spark per utilizzare il dimensionamento automatico verticale.

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

Prima di configurare il monitoraggio, assicurati di completare le seguenti attività di configurazione:
+ Completa le fasi descritte in [Configurazione dell'operatore Spark per Amazon EMR su EKS](spark-operator-setup.md).
+ (opzionale) Se in precedenza hai installato una versione precedente dell'operatore Spark, elimina il SparkApplication/ScheduledSparkApplication CRD.

  ```
  kubectl delete crd sparkApplication
  kubectl delete crd scheduledSparkApplication
  ```
+ Completa le fasi descritte in [Installazione dell'operatore Spark](spark-operator-gs.md#spark-operator-install). Nel passaggio 3, aggiungi la seguente riga al comando di installazione per consentire l'uso dei webhook all'operatore:

  ```
  --set webhook.enable=true
  ```
+ Completa le fasi descritte in [Configurazione del dimensionamento automatico verticale per Amazon EMR su EKS](jobruns-vas-setup.md).
+ Consenti l'accesso ai file nella tua posizione Amazon S3:

  1. Annota il tuo account di servizio autista e operatore con un account `JobExecutionRole` che dispone delle autorizzazioni S3.

     ```
     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. Aggiorna la politica di fiducia del tuo ruolo di esecuzione del lavoro in quel namespace.

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

  1. Modifica la policy di fiducia dei ruoli IAM del tuo ruolo di esecuzione del lavoro e aggiorna il form `serviceaccount` to`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. Se utilizzi Amazon S3 come archivio di file, aggiungi le seguenti impostazioni predefinite al tuo file yaml.

     ```
     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
     ```

## Esegui un processo con dimensionamento automatico verticale sull'operatore Spark
<a name="spark-operator-vas-run"></a>

Prima di poter eseguire un'applicazione Spark con l'operatore Spark, devi completare i passaggi indicati in [Prerequisiti](#spark-operator-vas-prereqs). 

Per utilizzare la scalabilità automatica verticale con l'operatore Spark, aggiungi la seguente configurazione al driver per le specifiche dell'applicazione Spark per attivare la scalabilità automatica verticale:

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

Questa configurazione consente la scalabilità automatica verticale ed è una configurazione di firma obbligatoria che ti consente di scegliere una firma per il tuo lavoro.

Per ulteriori informazioni sulle configurazioni e sui valori dei parametri, consulta [Configurazione della scalabilità automatica verticale per Amazon](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/jobruns-vas-configure.html) EMR su EKS. Per impostazione predefinita, il processo viene inviato nella modalità **Disattivato** di solo monitoraggio del dimensionamento automatico verticale. Questo stato di monitoraggio consente di calcolare e visualizzare consigli sulle risorse senza eseguire il dimensionamento automatico. [Per ulteriori informazioni, consulta Modalità di scalabilità automatica verticale.](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/jobruns-vas-configure.html#jobruns-vas-parameters-opt-mode)

Di seguito è riportato un esempio di file di `SparkApplication` definizione denominato `spark-pi.yaml` con le configurazioni richieste per utilizzare la scalabilità automatica verticale.

```
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"
```

A questo punto, invia l'applicazione Spark con il comando seguente. L'operazione creerà anche un oggetto `SparkApplication` denominato `spark-pi`:

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

[Per maggiori informazioni sull'invio di applicazioni a Spark tramite l'operatore Spark, consulta Using a nella documentazione su. `SparkApplication`](https://www.kubeflow.org/docs/components/spark-operator/user-guide/using-sparkapplication/) `spark-on-k8s-operator` GitHub

## Verifica della funzionalità di dimensionamento automatico verticale
<a name="spark-operator-vas-verify"></a>

Per verificare che il dimensionamento automatico verticale funzioni correttamente per il processo inviato, utilizza kubectl per ottenere la risorsa personalizzata `verticalpodautoscaler` e visualizzare i consigli di dimensionamento.

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

L'output della query deve assomigliare al seguente:

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

Se l'output non è simile o contiene un codice di errore, consulta la procedura indicata in [Risoluzione dei problemi relativi al dimensionamento automatico verticale di Amazon EMR su EKS](troubleshooting-vas.md) per risolvere il problema.

Per rimuovere i pod e le applicazioni, esegui il seguente comando:

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