Skip to content

Come posso accedere ai log dei driver Spark su un cluster Amazon EMR?

4 minuti di lettura
0

Desidero accedere ai log dei driver Apache Spark su un cluster Amazon EMR e risolvere i problemi di un'applicazione Spark.

Risoluzione

Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Su Amazon EMR, Spark viene eseguito come applicazione YARN e supporta le modalità di distribuzione client e cluster.

Processi in modalità client

La modalità client è la modalità di distribuzione predefinita. In modalità client, il driver Spark viene eseguito sull'host in cui viene eseguito il comando spark-submit. Quando si esegue il comando spark-submit con il client --deploy-mode client sul nodo principale, ricevi i log dei driver nella finestra del terminale. Per impostazione predefinita, Amazon EMR non archivia questi log. Per acquisire i log, salva l'output del comando spark-submit in un file.

Esempio di comando:

spark-submit [--deploy-mode client] ... 1>output.log 2>error.log

Quando utilizzi una fase Amazon EMR per inviare un'applicazione Spark, Amazon EMR archivia i log dei driver nel file stderr.gz in Amazon Simple Storage Service (Amazon S3). Il percorso del file è simile al seguente:

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

Per ulteriori informazioni, consulta Visualizzazione dei file di log archiviati in Amazon S3.

Per accedere ai log dei driver Spark, scarica i log della fase su un'istanza Amazon Elastic Compute Cloud (Amazon EC2), quindi cerca avvisi ed errori.

Completa i seguenti passaggi:

  1. Esegui il seguente comando sync per scaricare i log della fase:

    aws s3 sync s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/steps/s-2M809TD67U2IA/ s-2M809TD67U2IA/
  2. Esegui il seguente comando per aprire la cartella dei log della fase:

    cd s-2M809TD67U2IA/
  3. Esegui il seguente comando per decomprimere il file dei log:

    find . -type f -exec gunzip filename\;

    Nota: sostituisci filename con il nome del tuo file.

  4. Esegui il seguente comando per ottenere l'ID dell'applicazione YARN dal log della modalità cluster:

    grep "Client: Application report for" * | tail -n 1
  5. Esegui il seguente comando per trovare errori e avvisi nel registro della modalità client:

    egrep "WARN|ERROR" *

Puoi anche utilizzare applicazioni come JupyterHub, Apache Livy o Apache Zeppelin come client per inviare un'applicazione Spark al cluster. Le applicazioni memorizzano i log dei driver nei log dell'applicazione nella cartella /mnt/var/log/ sul nodo principale.

Puoi anche trovare i log compressi nel percorso di Amazon S3 s3://awsexamplebucket/JOBFLOW_ID/node/MASTER_ID/applications/.

Se usi Zeppelin, puoi trovare i log dei driver Spark in Amazon S3 /mnt/var/log/zeppelin/zeppelin-interpreter-spark-##########.log.

Per Jupyter, puoi trovare i log dei driver nei log di Livy /mnt/var/log/livy/livy-livy-server.out.

Processi in modalità cluster

Quando invii l'applicazione Spark in modalità cluster, il processo del driver viene eseguito nel container primario dell'applicazione. Il primario dell'applicazione è il primo container che viene eseguito quando viene eseguita l'applicazione Spark. Il client registra il report dell'applicazione YARN.

Per ottenere i log dei driver, completa i seguenti passaggi:

  1. Ottieni l'ID dell'applicazione dai log del client.
    Esempio di output con ID dell'applicazione application_1572839353552_0008.

    19/11/04 05:24:42 INFO Client: Application report for application_1572839353552_0008 (state: ACCEPTED)
  2. Identifica i log del container primario dell'applicazione.
    Esempio di elenco dei log dell'applicazione Spark:

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

    Nota: il primo container dell'elenco è sempre il container principale. Nell'elenco precedente, il container principale è container_1572839353552_0008_01_000001.

  3. Esegui il seguente comando sync per scaricare i log del container primario dell'applicazione su un'istanza:

    aws s3 sync s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/containers/application_1572839353552_0008/ application_1572839353552_0008/
  4. Esegui il seguente comando per aprire la cartella dei log dell'applicazione Spark:

    cd application_1572839353552_0008/
  5. Esegui il seguente comando per decomprimere il file dei log:

    find . -type f -exec gunzip {} \;
  6. Esegui il seguente comando per cercare errori e avvisi in tutti i log dei container:

    egrep -Ril "ERROR|WARN" . | xargs egrep "WARN|ERROR"
  7. Esegui il seguente comando per ottenere l'indirizzo del nodo su cui è stato eseguito il container primario dell'applicazione. Su un cluster in esecuzione, puoi utilizzare la CLI YARN per ottenere i log del container dell'applicazione YARN:

    yarn logs -applicationId application_1585844683621_0001 | grep  'Container: container_1585844683621_0001_01_000001'

    Output atteso:

    20/04/02 19:15:09 INFO client.RMProxy: Connecting to ResourceManager at ip-###-##-##-##.us-west-2.compute.internal/###.##.##.##:8032
    Container: container_1585844683621_0001_01_000001 on ip-###-##-##-##.us-west-2.compute.internal_8041
  8. Per le applicazioni Spark inviate in modalità cluster, esegui il seguente comando per estrarre i log del container primario dell'applicazione:

    yarn logs -applicationId application_1585844683621_0001 -containerId container_1585844683621_0001_01_000001 -nodeAddress ip-###-##-##-##.us-west-2.compute.internal

    Nota: sostituisci applicationId con l'ID della tua applicazione, containerId con l'ID del tuo container e nodeAddress ip con l'indirizzo del tuo nodo.

Informazioni correlate

Risoluzione dei problemi relativi ai cluster Amazon EMR

Configurazione di Spark

AWS UFFICIALEAggiornata 4 mesi fa