2016-05-16 12 views
14
gruppo Spark

mio Apache è in esecuzione un'applicazione che mi sta dando un sacco di timeout Esecutore:Spark gruppo pieno di timeout battito cardiaco, esecutori di uscire da soli

10:23:30,761 ERROR ~ Lost executor 5 on slave2.cluster: Executor heartbeat timed out after 177005 ms 
10:23:30,806 ERROR ~ Lost executor 1 on slave4.cluster: Executor heartbeat timed out after 176991 ms 
10:23:30,812 ERROR ~ Lost executor 4 on slave6.cluster: Executor heartbeat timed out after 176981 ms 
10:23:30,816 ERROR ~ Lost executor 6 on slave3.cluster: Executor heartbeat timed out after 176984 ms 
10:23:30,820 ERROR ~ Lost executor 0 on slave5.cluster: Executor heartbeat timed out after 177004 ms 
10:23:30,835 ERROR ~ Lost executor 3 on slave7.cluster: Executor heartbeat timed out after 176982 ms 

Tuttavia, nella mia configurazione Posso confermare ho aumentato con successo l'intervallo di esecutore battito cardiaco: enter image description here

quando visito i log di esecutori contrassegnate come EXITED (vale a dire: il conducente li ha rimossi quando non ha potuto ottenere un battito cardiaco), sembra che gli esecutori stessi uccisi perché non hanno ricevuto qualsiasi attività dal driver:

16/05/16 10:11:26 ERROR TransportChannelHandler: Connection to /10.0.0.4:35328 has been quiet for 120000 ms while there are outstanding requests. Assuming connection is dead; please adjust spark.network.timeout if this is wrong. 
16/05/16 10:11:26 ERROR CoarseGrainedExecutorBackend: Cannot register with driver: spark://[email protected]:35328 

Come posso spegnere battiti cardiaci e/o prevenire gli esecutori di timeout?

risposta

17

La risposta è stata piuttosto semplice. Nel mio spark-defaults.conf ho impostato lo spark.network.timeout su un valore più alto. L'intervallo di battito cardiaco era alquanto irrilevante per il problema (sebbene l'accordatura sia utile).

Quando si utilizza spark-submit ero anche in grado di impostare il timeout come segue:

$SPARK_HOME/bin/spark-submit --conf spark.network.timeout 10000000 --class myclass.neuralnet.TrainNetSpark --master spark://master.cluster:7077 --driver-memory 30G --executor-memory 14G --num-executors 7 --executor-cores 8 --conf spark.driver.maxResultSize=4g --conf spark.executor.heartbeatInterval=10000000 path/to/my.jar 
+1

Gli heartbeat consentono al driver di sapere che l'esecutore è ancora attivo e lo aggiorna con le metriche per le attività in corso. spark.executor.heartbeatInterval dovrebbe essere significativamente inferiore a spark.network.timeout - http://spark.apache.org/docs/latest/configuration.html – evgenii

+0

questo non ha funzionato per me, ho dovuto usare - conf spark.network.timeout = 10000000 – nEO

20

battiti cardiaci mancanti ed esecutori uccisi dal filato è quasi sempre a causa Ooms. Dovresti controllare i registri sui singoli esecutori (cerca il testo "che va oltre la memoria fisica"). Se hai molti esecutori e trovi difficile controllare tutti i registri manualmente, ti consiglio di monitorare il tuo lavoro nell'interfaccia utente di Spark mentre è in esecuzione. Non appena un task fallisce, ne riporta la causa nell'interfaccia utente, quindi è facile da vedere. Tieni presente che alcune attività segnalano un errore a causa della mancanza di esecutori che sono già stati uccisi, quindi assicurati di esaminare le cause per ciascuna delle singole attività non riuscite.

Si noti inoltre che la maggior parte dei problemi possono essere risolti OOM rapidamente semplicemente partizionamento dei dati in luoghi appropriati nel codice (ancora una volta cerca nella UI Spark per i suggerimenti su dove ci potrebbe essere la necessità di una chiamata a repartition). In caso contrario, potrebbe essere necessario aumentare le dimensioni delle macchine per soddisfare la necessità di memoria.

+0

Ho avuto lo stesso problema e 'ripartizione' ha fatto il trucco. Grazie –

Problemi correlati