

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Uso do ajuste de escala automático vertical com o operador do Spark para Amazon EMR no EKS
<a name="spark-operator-vas"></a>

A partir do Amazon EMR 7.0, você pode usar o ajuste de escala automático vertical do Amazon EMR no EKS para simplificar o gerenciamento de recursos. Ela ajusta automaticamente os recursos de memória e de CPU para se adaptar às necessidades da workload fornecida para aplicações do Spark no Amazon EMR. Para obter mais informações, consulte [Uso da escalabilidade automática vertical com trabalhos do Spark no Amazon EMR](jobruns-vas.md).

Esta seção descreve como configurar o operador Spark para usar o ajuste de escala automático vertical.

## Pré-requisitos
<a name="spark-operator-vas-prereqs"></a>

Antes de configurar o monitoramento, certifique-se de concluir as seguintes tarefas de configuração:
+ Siga as etapas em [Configuração do operador do Spark para o Amazon EMR no EKS](spark-operator-setup.md).
+ (opcional) Se você instalou anteriormente uma versão mais antiga do operador Spark, exclua o SparkApplication/ScheduledSparkApplication CRD.

  ```
  kubectl delete crd sparkApplication
  kubectl delete crd scheduledSparkApplication
  ```
+ Siga as etapas em [Instalação do operador do Spark](spark-operator-gs.md#spark-operator-install). Na etapa 3, adicione a seguinte linha ao comando de instalação para permitir webhooks para o operador:

  ```
  --set webhook.enable=true
  ```
+ Siga as etapas em [Configuração da escalabilidade automática vertical para o Amazon EMR no EKS](jobruns-vas-setup.md).
+ Dê acesso aos arquivos na localização do Amazon S3:

  1. Anote sua conta de serviço do driver e do operador com o `JobExecutionRole` que tem as permissões do 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. Atualize a política de confiança do perfil de execução de trabalho nesse namespace.

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

  1. Edite a política de confiança do perfil do IAM do perfil de execução de trabalhos e atualize a `serviceaccount` de `emr-containers-sa-spark-*-*-xxxx` para `emr-containers-sa-*`.

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

  1. Se estiver usando o Amazon S3 como armazenamento de arquivos, adicione os padrões a seguir ao arquivo 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
     ```

## Execute um trabalho com ajuste de escala automático vertical no operador do Spark
<a name="spark-operator-vas-run"></a>

Antes de executar uma aplicação do Spark com o operador do Spark, conclua as etapas em [Pré-requisitos](#spark-operator-vas-prereqs). 

Para usar o ajuste de escala automático vertical com o operador do Spark, adicione a seguinte configuração ao driver da especificação da aplicação do Spark para ativar o ajuste de escala automático vertical:

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

Essa configuração permite o ajuste de escala automático vertical e é uma configuração de assinatura obrigatória que permite escolher uma assinatura para o trabalho.

Para obter mais informações sobre as configurações e os valores dos parâmetros, consulte [Configuring vertical autoscaling for Amazon EMR on EKS](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/jobruns-vas-configure.html). Por padrão, seu trabalho é enviado com a opção somente monitoramento no modo **Desativado** para a escalabilidade automática vertical. Esse estado de monitoramento permite calcular e visualizar recomendações de recursos sem realizar a escalabilidade automática. Para obter mais informações, consulte [Vertical autoscaling modes](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/jobruns-vas-configure.html#jobruns-vas-parameters-opt-mode).

O exemplo a seguir mostra um arquivo de definição `SparkApplication` chamado `spark-pi.yaml` com as configurações necessárias para usar ajuste de escala automático vertical.

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

Agora, envie a aplicação do Spark com o comando apresentado a seguir. Isso também criará um objeto `SparkApplication` chamado `spark-pi`:

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

Para obter mais informações sobre como enviar inscrições para o Spark por meio do operador do Spark, consulte [Usando um `SparkApplication` na `spark-on-k8s-operator` documentação](https://www.kubeflow.org/docs/components/spark-operator/user-guide/using-sparkapplication/) sobre. GitHub

## Verificação de funcionalidade da escalabilidade automática vertical
<a name="spark-operator-vas-verify"></a>

Para verificar se a escalabilidade automática vertical está funcionando corretamente para o trabalho enviado, use kubectl para obter o recurso personalizado `verticalpodautoscaler` e visualizar suas recomendações de escalabilidade.

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

A saída desta consulta deve ser semelhante à seguinte:

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

Se a saída não for semelhante ou tiver um código de erro, consulte [Solução de problemas de escalabilidade automática vertical do Amazon EMR no EKS](troubleshooting-vas.md) para obter passos que ajudam a resolver o problema.

Para remover pods e aplicações, execute o seguinte comando:

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