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

4 minuti di lettura
0

Voglio risolvere i problemi di un'applicazione Apache Spark. Come accedo ai log dei driver Spark su un cluster Amazon EMR?

Breve descrizione

Su Amazon EMR, Spark viene eseguito come applicazione YARN e supporta due modalità di implementazione:

  • Modalità client: Questa è la modalità di implementazione predefinita. In modalità client, il driver Spark viene eseguito sull'host in cui viene eseguito il comando spark-submit.
  • Modalità cluster: Il driver Spark viene eseguito nell'application master. L'application master è il primo container che viene eseguito durante l'esecuzione del lavoro Spark.

Soluzione

Lavori in modalità client

Quando invii un'applicazione Spark eseguendo spark-submit con il client --deploy-mode sul nodo principale, i registri del driver vengono visualizzati nella finestra del terminale. Amazon EMR non archivia questi registri per impostazione predefinita. Per acquisire i log, salva l'output del comando spark-submit in un file. Esempio:

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

Quando invii un'applicazione Spark utilizzando una fase Amazon EMR, i log dei driver vengono archiviati nel file stderr.gz su 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 View log files archived to Amazon S3.

Scarica i log dei passaggi su un'istanza di Amazon Elastic Compute Cloud (Amazon EC2) e quindi cerca avvisi ed errori:

1.    Scarica i registri dei passaggi:

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

2.    Apri la cartella del registro dei passaggi:

cd s-2M809TD67U2IA/

3.    Decomprimi il file di registro:

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

4.    Ottieni l'id dell'applicazione YARN dal registro della modalità cluster:

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

5.    Trova errori e avvisi nel registro della modalità client:

egrep "WARN|ERROR" *

È anche possibile inviare un'applicazione Spark utilizzando un'applicazione come JupyterHub, Apache Livy o Apache Zeppelin. Queste applicazioni diventano il client che invia l'applicazione Spark al cluster. In questo scenario, i registri dei driver vengono archiviati nei log dell'applicazione corrispondente, nella cartella /mnt/var/log/ del nodo principale. Puoi anche trovare i log compressi nel seguente percorso Amazon S3:

s3://awsexamplebucket/JOBFLOW_ID/node/MASTER_ID/applications/

Ad esempio, se usi Zeppelin, puoi trovare i log dei driver Spark in /mnt/var/log/zeppelin/zeppelin-interpreter-spark-xxxxxxxxxx.log.

Nota: Per Jupyter, i registri dei driver sono archiviati nei log di Livy: /mnt/var/log/livy/livy-livy-server.out.

Per ulteriori informazioni sull'accesso ai log specifici dell'applicazione, consulta View log files archived to Amazon S3.

Lavori in modalità cluster

Quando invii l'applicazione Spark in modalità cluster, il processo del driver viene eseguito nel container principale dell'applicazione. L'application master è il primo container che viene eseguito quando viene eseguita l'applicazione Spark. Il client registra il report dell'applicazione YARN. Per ottenere i registri dei driver:

1.    Ottieni l'ID dell'applicazione dai registri del client. Nell'esempio seguente, application_1572839353552_0008 è l'ID dell'applicazione.

19/11/04 05:24:42 INFO Client: Application report for application_1572839353552_0008 (state: ACCEPTED)

2.    Identifica i log del container dell'application master. Di seguito è riportato un elenco di esempio di log delle applicazioni Spark. In questo elenco, container_1572839353552_0008_01_000001 è il primo container, il che significa che è il container principale 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

3.    Scarica i log del container dell'application master su un'istanza EC2:

aws s3 sync s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/containers/application_1572839353552_0008/ application_1572839353552_0008/

4.    Apri la cartella di registro dell'applicazione Spark:

cd application_1572839353552_0008/

5.    Decomprimi il file di registro:

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

6.    Cerca errori e avvisi in tutti i log dei container:

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

7.    Apri i log del container che vengono restituiti nell'output del comando precedente.

Su un cluster in esecuzione, puoi utilizzare la CLI YARN per ottenere i log del container dell'applicazione YARN. Per un'applicazione Spark inviata in modalità cluster, puoi accedere ai log del driver Spark estraendo i log del container dell'application master in questo modo:

# 1. Get the address of the node that the application master container ran on
$ yarn logs -applicationId application_1585844683621_0001 | grep  'Container: container_1585844683621_0001_01_000001'

20/04/02 19:15:09 INFO client.RMProxy: Connecting to ResourceManager at ip-xxx-xx-xx-xx.us-west-2.compute.internal/xxx.xx.xx.xx:8032
Container: container_1585844683621_0001_01_000001 on ip-xxx-xx-xx-xx.us-west-2.compute.internal_8041

# 2. Use the node address to pull the container logs
$ yarn logs -applicationId application_1585844683621_0001 -containerId container_1585844683621_0001_01_000001 -nodeAddress ip-xxx-xx-xx-xx.us-west-2.compute.internal

Informazioni correlate

Troubleshoot a cluster

Configure Spark

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa