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

4 minuti di lettura
0

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

Breve descrizione

Per risolvere i passaggi non riusciti di Spark:

  • Per i lavori Spark inoltrati con il client --deploy-mode: Controlla i log dei passaggi per identificare la causa principale dell'errore della fase.
  • Per i lavori Spark inoltrati con il cluster --deploy-mode: Controlla 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.

Risoluzione

Lavori in modalità client

Quando un lavoro Spark viene distribuito in modalità client, i log dei passaggi forniscono i parametri del processo e i messaggi di errore della fase. Questi log vengono archiviati su Amazon Simple Storage Service (Amazon S3). Ad esempio:

  • s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/steps/s-2M809TD67U2IA/controller.gz: Questo file contiene il comando spark-submit. Controlla questo log per vedere i parametri del lavoro.
  • s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/steps/s-2M809TD67U2IA/stderr.gz: Questo file fornisce i log del driver. (Quando il lavoro Spark viene eseguito in modalità client, il driver Spark viene eseguito sul nodo principale).

Per trovare la causa principale del fallimento del passo, esegui i seguenti comandi per scaricare i log dei passi su un'istanza di Amazon Elastic Compute Cloud (Amazon EC2). Quindi, cerca avvisi ed errori:

#Download the step logs:
aws s3 sync s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/steps/s-2M809TD67U2IA/ s-2M809TD67U2IA/
#Open the step log folder:
cd s-2M809TD67U2IA/
#Uncompress the log file:
find . -type f -exec gunzip {} \;
#Get the yarn application id from the cluster mode log:
grep "Client: Application report for" * | tail -n 1
#Get the errors and warnings from the client mode log:
egrep "WARN|ERROR" *

Ad esempio, questo file:

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

indica un problema di memoria:

19/11/04 05:24:45 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.

Usa le informazioni nei log per risolvere l'errore.

Ad esempio, per risolvere il problema della memoria, inoltra un lavoro con più memoria per gli esecutori:

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

Lavori in modalità cluster

  1. Controlla il log del passaggio stderr per identificare l'ID dell'applicazione associata al passaggio non riuscito. I log dei passaggi vengono archiviati su Amazon S3. Ad esempio, questo log:

s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/steps/s-2M809TD67U2IA/stderr.gz

identifica l’application_1572839353552_0008:

19/11/04 05:24:42 INFO Client: Application report for application_1572839353552_0008 (state: ACCEPTED)
  1. Identifica i log principali dell'applicazione. Quando il lavoro Spark viene eseguito in modalità cluster, il driver Spark viene eseguito all'interno del master dell'applicazione. Il master dell’applicazione è il primo container che viene eseguito quando viene eseguito il lavoro Spark. Di seguito è riportato un elenco di esempio di log delle applicazioni Spark.

In questo elenco, container\ _1572839353552\ _0008\ _01\ _000001 è il primo container, ovvero il master dell'applicazione.

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

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

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

s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/containers/application_1572839353552_0008/container_1572839353552_0008_01_000002/stdout.gz

  1. Dopo aver identificato i log principali dell'applicazione, scarica i log su un'istanza Amazon EC2. Quindi, cerca avvisi ed errori. Ad esempio:
#Download the Spark application logs:
aws s3 sync s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/containers/application_1572839353552_0008/ application_1572839353552_0008/
#Open the Spark application log folder:
cd application_1572839353552_0008/
#Uncompress the log file:
find . -type f -exec gunzip {} \;
#Search for warning and errors inside all the container logs. Then, open the container logs returned in the output of this command.
egrep -Ril "ERROR|WARN" . | xargs egrep "WARN|ERROR"

Ad esempio, questo log:

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

indica un problema di memoria:

19/11/04 05:24:45 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.
  1. Risolvi il problema identificato nei log. Ad esempio, per risolvere il problema della memoria, inoltra un lavoro con più memoria per gli esecutori:
spark-submit --deploy-mode cluster --executor-memory 4g --class org.apache.spark.examples.SparkPi /usr/lib/spark/examples/jars/spark-examples.jar 1000

Informazioni correlate

Aggiungere un passaggio Spark

AWS UFFICIALE
AWS UFFICIALEAggiornata 3 anni fa