Perché il mio processo Spark in Amazon EMR non è andato a buon fine?

9 minuti di lettura
0

Il mio processo Apache Spark in Amazon EMR non è andato a buon fine.

Risoluzione

Errori dell'applicazione

ERROR ShuffleBlockFetcherIterator: Failed to get block(s) from ip-192-168-14-250.us-east-2.compute.internal:7337

org.apache.spark.network .client.ChunkFetchFailureException: Failure while fetching StreamChunkId[streamId=842490577174,chunkIndex=0]: java.lang.RuntimeException: Executor is not registered (appId=application_1622819239076_0367, execId=661)

Questo problema può verificarsi quando il nodo worker dell'esecutore in Amazon EMR non è integro. Quando l'utilizzo del disco per un nodo worker supera la soglia di utilizzo del 90%, il servizio di integrità YARN NodeManager segnala il nodo come UNHEALHTY (NON INTEGRO). I nodi non integri sono inclusi nell'elenco non consentiti di Amazon EMR. Inoltre, i container YARN non sono allocati a quei nodi.

Per risolvere il problema, procedi come segue.

  • Esamina i log del gestore di risorse dal nodo principale del cluster EMR per individuare i nodi worker non integri. Per ulteriori informazioni, consulta la sezione How do I resolve ExecutorLostFailure "Slave lost" errors in Spark on Amazon EMR? (Come risolvo gli errori ExecutorLostFailure "Slave lost" in Spark su Amazon EMR?) ed esamina la sezione High disk utilization (Utilizzo elevato del disco).
  • Verifica l'utilizzo dello spazio su disco del nodo interessato, esamina i file che consumano spazio su disco ed esegui il ripristino dei dati per riportare i nodi a uno stato integro. Per ulteriori informazioni, consulta la sezione Why is the core node in my Amazon EMR cluster running out of disk space? (Perché lo spazio su disco del nodo principale sul cluster Amazon EMR è in esaurimento?)

ERROR [Executor task launch worker for task 631836] o.a.s.e.Executor:Exception in task 24.0 in stage 13028.0 (TID 631836) java.util.NoSuchElementException: None.get

Questo errore si verifica in caso di problemi nel codice dell'applicazione e nell'inizializzazione di SparkContext.

Assicurati che non ci siano più processi SparkContext attivi nella stessa sessione. Secondo la Java Virtual Machine (JVM), puoi avere uno SparkContext attivo alla volta. Se desideri inizializzare un altro SparkContext, devi interrompere il processo attivo prima di crearne uno nuovo.

Container terminato su richiesta. Il codice di uscita è 137

Questa eccezione si verifica quando un'attività in un container YARN supera la memoria fisica allocata per quel container. Ciò si verifica in genere quando si hanno partizioni shuffle, dimensioni delle partizioni incoerenti o un numero elevato di core dell'esecutore.

Esamina i dettagli dell'errore nei log dei driver Spark per determinarne la causa. Per ulteriori informazioni, consulta la sezione How can I access Spark driver logs on an Amazon EMR cluster? (In che modo posso accedere ai log di driver di Spark su un cluster Amazon EMR?)

Di seguito è riportato un esempio di errore dal log dei driver:

ERROR YarnScheduler: Lost executor 19 on ip-10-109-xx-xxx.aws.com : Container from a bad node: container_1658329343444_0018_01_000020 on host: ip-10-109-xx-xxx.aws.com . Exit status: 137.Diagnostics:
Container killed on request. Exit code is 137
Container exited with a non-zero exit code 137.
Killed by external signal
Executor container 'container_1658329343444_0018_01_000020' was killed with exit code 137. To understand the root cause, you can analyze executor container log.
# java.lang.OutOfMemoryError: Java heap space
# -XX:OnOutOfMemoryError="kill -9 %p"
# Executing /bin/sh -c "kill -9 23573"...

La traccia della pila di errori precedente indica che la memoria disponibile nell'esecutore non è sufficiente per continuare l'elaborazione dei dati. Questo errore può verificarsi in diverse fasi del processo in trasformazioni sia strette che ampie.

Per risolvere il problema, effettua una delle seguenti operazioni:

  • Aumenta la memoria dell'esecutore.
    Nota: la memoria dell'esecutore include la memoria necessaria per l'esecuzione delle attività più la memoria di overhead. La loro somma non deve essere superiore alla dimensione di JVM e alla dimensione massima del container YARN.
  • Aggiungi altre partizioni Spark.
  • Aumenta il numero di partizioni shuffle.
  • Riduci il numero di core dell'esecutore.

Per ulteriori informazioni, consulta la sezione How do I resolve "Container killed on request. Exit code is 137" in Spark on Amazon EMR? (Come risolvo l'errore "Container terminato su richiesta. Il codice di uscita è 137" in Spark su Amazon EMR?)

I processi Spark sono sospesi e non vengono completati

I processi Spark potrebbero essere bloccati per diversi motivi. Ad esempio, se il processo del driver Spark (master dell'applicazione) è interessato o i container dell'esecutore vengono persi.

Ciò si verifica in genere in caso di elevato utilizzo dello spazio su disco o quando si utilizzano istanze Spot per i nodi del cluster e l'istanza Spot viene terminata. Per maggiori informazioni, consulta la sezione How do I resolve ExecutorLostFailure "Slave lost" errors in Spark on Amazon EMR? (Come si risolvono gli errori ExecutorLostFailure "Slave lost" (Slave perso) in Spark su Amazon EMR?)

Per risolvere il problema, procedi come segue.

  • Consulta i log master o dei driver dell'applicazione Spark per eventuali eccezioni.
  • Convalida l'elenco dei nodi YARN per eventuali nodi non integri. Quando l'utilizzo del disco per un nodo principale supera la soglia di utilizzo, il servizio di integrità YARN Node Manager segnala il nodo come UNHEALTHY (NON INTEGRO). I nodi non integri sono inclusi nell'elenco non consentiti di Amazon EMR. Inoltre, i container YARN non sono allocati a quei nodi.
  • Monitora l'utilizzo dello spazio su disco e configura i volumi Amazon Elastic Block Store (Amazon EBS) per mantenere l'utilizzo al di sotto del 90% per i nodi worker del cluster EMR.

WARN Executor: Issue communicating with driver in heartbeater org.apache.spark.rpc.RpcTimeoutException: Futures timed out after [10000 milliseconds]. Questo timeout è controllato da spark.executor.heartbeatInterval

Gli esecutori Spark inviano segnali heartbeat al driver Spark a intervalli specificati dalla proprietà spark.executor.heartbeatInterval. Durante le lunghe pause di rimozione di oggetti inutili (garbage collection), l'esecutore potrebbe non inviare un segnale heartbeat. Il driver interrompe gli esecutori che non riescono a inviare un segnale heartbeat per un valore superiore a quello specificato.

TimeoutException

Le eccezioni di timeout si verificano quando l'esecutore è soggetto a limitazioni di memoria o deve affrontare problemi di memoria insufficiente (Out-of-Memory, OOM) durante l'elaborazione dei dati. Ciò influisce anche sul processo di rimozione di oggetti inutili (garbage collection), causando ulteriori ritardi.

Utilizza uno dei seguenti metodi per risolvere gli errori di timeout dell'heartbeat:

ExecutorLostFailure "Exit status: -100. Diagnostics: Container released on a *lost* node

Questo errore si verifica quando un nodo principale o attività viene terminato a causa dell'elevato utilizzo dello spazio su disco. L'errore si verifica anche quando un nodo non risponde a causa di un elevato utilizzo prolungato della CPU o della scarsa memoria disponibile. Per la procedura di risoluzione dei problemi, consulta la sezione How can I resolve "Exit status: -100. Diagnostics: Container released on a *lost* node" errors in Amazon EMR? (In che modo è possibile risolvere l'errore "Stato di uscita: -100. Diagnostica: errori di container rilasciato su un nodo *perso*" in Amazon EMR?)

Nota: questo errore può verificarsi anche quando si utilizzano istanze Spot per i nodi del cluster e un'istanza Spot viene terminata. In questo scenario, il cluster EMR fornisce un'istanza on demand per sostituire l'istanza Spot terminata. Ciò significa che l'applicazione potrebbe ripristinarsi da sola. Per maggiori informazioni, consulta la sezione Spark enhancements for elasticity and resiliency on Amazon EMR (Miglioramenti Spark per elasticità e resilienza su Amazon EMR).

executor 38: java.sql.SQLException (Network error IOException: Connection timed out (Connection timed out)

Questo problema è correlato alla comunicazione con il database SQL per stabilire la connessione socket durante la lettura o la scrittura dei dati. Verificare che l'host DB sia in grado di ricevere connessioni in ingresso sulla porta 1433 dai gruppi di sicurezza del cluster EMR.

Inoltre, esamina il numero massimo di connessioni parallele al database configurate per il DB SQL e l'allocazione della memoria per la classe di istanza DB. Anche le connessioni al database consumano memoria. Se l'utilizzo è elevato, controlla la configurazione del database e il numero di connessioni consentite. Per ulteriori informazioni, consulta la sezione Maximum number of database connections (Numero massimo di connessioni al database).

Eccezioni di Amazon S3

HTTP 503 "Slow Down"

Le eccezioni HTTP 503 si verificano quando si supera la velocità di richiesta di Amazon Simple Storage Service (Amazon S3) per il prefisso. Un'eccezione 503 non sempre significa che si verificherà un errore. Tuttavia, mitigare il problema può migliorare le prestazioni dell'applicazione.

Per maggiori informazioni, consulta la sezione Why does my Spark or Hive job on Amazon EMR fail with an HTTP 503 "Slow Down" AmazonS3Exception? (Perché il mio processo Spark o Hive in Amazon EMR non va a buon fine e mostra l'errore AmazonS3Exception HTTP 503 "Slow Down" (Rallentamento)?)

HTTP 403 "Access Denied"

Gli errori HTTP 403 sono causati da credenziali errate o non valide, ad esempio:

  • Credenziali o ruoli specificati nel codice dell'applicazione.
  • La policy collegata al ruolo di profilo dell'istanza Amazon EC2.
  • Endpoint Amazon Virtual Private Cloud (Amazon VPC) per Amazon S3.
  • Policy del bucket di origine e destinazione di S3.

Per risolvere gli errori 403, assicurati che il ruolo o la policy di AWS Identity and Access Management (IAM) pertinenti consentano l'accesso ad Amazon S3. Per ulteriori informazioni, consulta la sezione Why does my Amazon EMR application fail with an HTTP 403 "Access Denied" AmazonS3Exception? (Perché la mia applicazione Amazon EMR restituisce l'errore AmazonS3Exception HTTP 403 "Access Denied" (Accesso negato)?)

HTTP 404 "Not Found"

Gli errori HTTP 404 indicano che l'applicazione si aspettava di trovare un oggetto in S3, ma al momento della richiesta l'oggetto non è stato trovato. Le cause più comuni includono:

  • Percorsi S3 errati (ad esempio, un percorso digitato in modo errato).
  • Il file è stato spostato o eliminato da un processo esterno all'applicazione.
  • Un'operazione ha causato eventuali problemi di coerenza, come una sovrascrittura.

Per ulteriori informazioni, consulta la sezione Why does my Amazon EMR application fail with an HTTP 404 "Not Found" AmazonS3Exception? (Perché la richiesta Amazon EMR restituisce l'errore AmazonS3Exception HTTP 404 "Not found" (Non trovato)?)


AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa