Usando AWS re:Post, accetti AWS re:Post Termini di utilizzo

Come posso risolvere un processo di Spark non riuscito in Amazon EMR?

6 minuti di lettura
0

Desidero risolvere un processo non riuscito di Apache Spark in Amazon EMR.

Breve descrizione

Per risolvere i processi di Spark non riusciti in Amazon EMR su Amazon Elastic Compute Cloud (Amazon EC2), completa i seguenti passaggi:

  • Per i processi Spark inviati con --deploy-mode-client, controlla i log dei processi per identificare la causa principale dell'errore del passaggio.
  • Per i processi di Spark inviati con**--deploy-mode-cluster**, controlla innanzitutto i log dei passaggi per identificare l'ID dell'applicazione. Quindi, controlla i log principali dell'applicazione per identificare la causa principale dell'errore del passaggio.

Per risolvere i processi di Spark non riusciti su Amazon EMR su Amazon Elastic Kubernetes Service (Amazon EKS), identifica la causa principale dell'errore del processo di Spark. A tale scopo, controlla i log dei driver di Amazon Simple Storage Service (Amazon S3) o di Amazon CloudWatch.

Per risolvere i processi di Spark non riusciti su Amazon EMR serverless, identifica la causa principale dell'errore del processo di Spark. A tale scopo, controlla i dettagli dell'esecuzione del processo dalla console applicativa di Amazon EMR serverless e dai log dei driver.

Risoluzione

Risolvi i problemi di Amazon EMR sui processi di Spark non riusciti in Amazon EC2

Processi in modalità client
Quando un processo di Spark viene distribuito in modalità client, i log dei passaggi forniscono i parametri del processo e i messaggi di errore del passaggio. Questi log vengono archiviati in Amazon S3.

Per identificare la causa principale dell'errore di un passaggio, scarica i log dei passaggi su un'istanza di Amazon EC2. Quindi, cerca avvisi ed errori. Completa i seguenti passaggi:

Per decomprimere il file di log dei passaggi, esegui il comando seguente:

find . -type f -exec gunzip {} \;

Per identificare l'ID dell'applicazione YARN dal log della modalità cluster, esegui il seguente comando:

grep "Client: Application report for" * | tail -n 1

Il seguente file di esempio indica un problema di memoria:

"ERROR SparkContext: Error initializing SparkContext.java.lang.IllegalArgumentException: Executor memory 134217728 must be at least 471859200. Please increase executor memory using the --executor-memory option or spark.executor.memory in Spark configuration."

Per risolvere l'errore precedente, esegui il comando spark-submit per inviare un processo con una memoria maggiore. Per ulteriori informazioni, consulta Submitting applications sul sito Web di Apache Spark.
Esempio:

spark-submit --deploy-mode client --executor-memory 4g --class org.apache.spark.examples.SparkPi /usr/lib/spark/examples/jars/spark-examples.jar

Processi in modalità cluster
Per identificare l'ID dell'applicazione associata al passaggio di Spark non riuscito, controlla i log del passaggio stderr. I log dei passaggi vengono archiviati su Amazon S3. Successivamente, identifica i log primari dell'applicazione. I processi di Spark in modalità cluster vengono eseguiti nel registro primario dell'applicazione. Il registro primario dell'applicazione è il primo container a essere eseguito all'avvio di un processo di Spark. Nell'esempio seguente, il container _1572839353552_0008_01_000001 è il primo container dei log primari dell'applicazione.

Esempio:
s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/containers/application_1572839353552_0008/container_1572839353552_0008_01_000001/stderr.gz

Dopo aver identificato i log primari dell'applicazione, scarica i log su un'istanza di Amazon EC2. Quindi, cerca avvisi ed errori.

Per decomprimere il file di log dei passaggi, esegui il comando seguente:

find . -type f -exec gunzip {} \;

Per cercare avvisi ed errori nei log dei container, apri i log dei container che si trovano nell'output del seguente comando:

egrep -Ril "ERROR|WARN" . | xargs egrep "WARN|ERROR"

Se il log di un container indica un problema di memoria, esegui il seguente comando spark-submit per inviare un processo con una memoria maggiore:

spark-submit --deploy-mode cluster --executor-memory 4g --class org.apache.spark.examples.SparkPi /usr/lib/spark/examples/jars/spark-examples.jar 1000

Risolvi i problemi relativi a processi di Spark non riusciti in Amazon EMR su Amazon EKS

Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), consulta la sezione Troubleshoot AWS CLI errors. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Quando un processo di Spark viene inviato ad Amazon EMR su Amazon EKS, i log possono essere archiviati su Amazon S3 o su CloudWatch. Assicurati di controllare i log dei driver per i processi di Spark non riusciti. Inoltre, usa i comandi kubectl per ottenere maggiori dettagli relativi ai log del driver e dell'esecutore per il processo di Spark in esecuzione.

Nota: I comandi Kubectl funzionano solo per i pod attivi. Quando i pod sono arrestati, non puoi eseguire i comandi kubectl.

Se invii un processo di Spark con il comando start-job-run, usa i seguenti comandi kubectl:

kubectl get pods -n example-spark-namespace

Nota: sostituisci example-spark-namespace con lo spazio dei nomi di Spark utilizzato per avviare il processo.

kubectl logs spark-example-pod-driver -n example-spark-namespace -c spark-kubernetes-driver

Nota: sostituisci example-spark-namespace con lo spazio dei nomi di Spark utilizzato per avviare il processo ed example-pod con il nome del pod.

Se invii un processo di Spark con il comando spark-operator, usa i seguenti comandi kubectl:

kubectl get pods -n example-spark-namespace

Nota: sostituisci example-spark-namespace con lo spazio dei nomi di Spark utilizzato per avviare il processo.

kubectl logs example-pod-driver -n example-spark-namespace

Nota: sostituisci example-pod con il nome del pod ed example-spark-namespace con lo spazio dei nomi di Spark utilizzato per avviare il processo.

Se invii un processo di Spark con il comando spark-submit usa i seguenti comandi kubectl. Per ulteriori informazioni, consulta Submitting applications sul sito Web di Apache Spark.

kubectl get pods -n example-spark-namespace

Nota: sostituisci example-spark-namespace con lo spazio dei nomi di Spark utilizzato per avviare il processo.

kubectl logs example-pod-driver -n example-spark-namespace

Nota: sostituisci example-spark-namespace con lo spazio dei nomi di Spark utilizzato per avviare il processo ed example-pod con il nome del pod.

Risolvi i problemi relativi ai processi di Spark non riusciti in Amazon EMR serverless

Quando invii un processo di Spark ad Amazon EMR serverless, per impostazione predefinita si attiva la registrazione di tutte le esecuzioni dei processi. Puoi inoltre attivare la registrazione in Amazon S3 per il tuo bucket Amazon S3. Per risolvere i problemi relativi al processo di Spark non riuscito, visualizza i dettagli dell'esecuzione del processo, quindi scegli l'opzione File di log del driver. Inoltre, puoi controllare i log archiviati in CloudWatch per identificare la causa principale del fallimento del processo di Spark.

Informazioni correlate

Add a Spark step

Running jobs with Amazon EMR on EKS

Logging and monitoring

AWS UFFICIALE
AWS UFFICIALEAggiornata 3 mesi fa