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 su EMR EKS
A partire da Amazon EMR 7.0, puoi utilizzare Amazon EMR con scalabilità automatica EKS verticale per semplificare la gestione delle risorse. Ottimizza automaticamente memoria e CPU risorse per adattarsi alle esigenze del carico di lavoro fornito per le applicazioni Amazon EMR Spark. Per ulteriori informazioni, consulta Utilizzo della scalabilità automatica verticale con i job Amazon Spark EMR.
Questa sezione descrive come configurare l'operatore Spark per utilizzare il dimensionamento automatico verticale.
Prerequisiti
Prima di continuare, assicurati di aver completato la seguente configurazione:
-
Completa le fasi descritte in Configurazione dell'operatore Spark per Amazon su EMR EKS.
-
(Facoltativo) Se in precedenza hai installato una versione precedente dell'operatore Spark, elimina/. SparkApplication ScheduledSparkApplication CRD
kubectl delete crd sparkApplication kubectl delete crd scheduledSparkApplication
-
Completa le fasi descritte in Installazione dell'operatore Spark. 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 della scalabilità automatica verticale per Amazon su EMR EKS.
-
Consenti l'accesso ai file nella tua posizione Amazon S3:
-
Annota il tuo account di servizio per conducente 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
-
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
-
Modifica la politica di fiducia dei ruoli del tuo IAM ruolo di esecuzione del lavoro e aggiorna il modulo
serviceaccount
da aemr-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-*" } } } -
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
Prima di poter eseguire un'applicazione Spark con l'operatore Spark, devi completare i passaggi indicati in Prerequisiti.
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 su. EMR 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.
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.2.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
spark-on-k8s-operator
GitHub
Verifica della funzionalità di dimensionamento automatico verticale
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 di Amazon EMR sulla EKS scalabilità automatica verticale per risolvere il problema.
Per rimuovere i pod e le applicazioni, esegui il seguente comando:
kubectl delete sparkapplication spark-pi