2014-10-28 13 views
5

Capisco in che modo i nodi di lavoro sono tolleranti ai guasti, ma cosa succede se il programma del driver si arresta in modo anomalo per qualche motivo inaspettato? (spegnimento/problema di memoria ecc.).Cosa succede se il programma del driver si arresta in modo anomalo?

Immagino che perderete tutto il lavoro, poiché il codice che legge i risultati non è più in esecuzione o Spark sa in qualche modo come riavviarlo? Se é cosi, come?

+3

A seconda di come viene eseguito il driver. Ad esempio, se corri in modalità filato, il filato riproverà il tuo autista. Tuttavia, significa rieseguire tutti i tuoi lavori. – zsxwing

+0

Grazie. Quindi ho bisogno di progettarlo in modo che il driver salvi da qualche parte i calcoli dei sottoprogrammi, aggiorni lo "stadio" del calcolo in qualche registro e gestisca internamente la tolleranza agli errori, immagino che sia –

+0

. Devi recuperare il driver da solo. – zsxwing

risposta

4

Come @zsxwing indica dipende da come si esegue il driver. Oltre a eseguire il filato, puoi anche eseguire il tuo lavoro con una modalità di distribuzione del cluster (questo è un parametro per l'invio di scintille). In Spark Streaming specifichi --supervise e Spark riavvierà il lavoro automaticamente. I dettagli sono nello Spark Streaming Guide.

+0

È necessario il checkpoint quando si utilizza --supervise? – okwap

2

Sì, è possibile riavviare le applicazioni spark. Sono disponibili alcune opzioni specifiche per il gestore cluster in uso. Ad esempio, con un cluster autonomo Spark con modalità di distribuzione cluster, è inoltre possibile specificare --supervise per assicurarsi che il driver venga automaticamente riavviato in caso di errore con codice di uscita diverso da zero. Per enumerare tutte queste opzioni disponibili per stimolare-presentare, eseguirlo con --help:

funzionamento su un cluster Spark standalone in modalità implementare cluster con supervisionare

./bin/spark-submit \ 
    --class org.apache.spark.examples.SparkPi \ 
    --master spark://207.184.161.138:7077 \ 
    --deploy-mode cluster \ 
    --supervise \ 
    /path/to/examples.jar \ 
    1000 
0

Come da Spark documentazione: -

Spark Standalone - È possibile inviare un driver dell'applicazione Spark per l'esecuzione all'interno del cluster Spark Standalone (vedere la modalità di distribuzione cluster), ovvero, il driver dell'applicazione stesso viene eseguito su uno dei nodi worker. Inoltre, il gestore cluster autonomo può essere istruito per supervisionare il driver e riavviarlo se il driver non riesce a causa di un codice di uscita diverso da zero o a causa di un errore del nodo su cui è in esecuzione il driver. Vedi la modalità cluster e supervisiona nella guida Spark Standalone per maggiori dettagli.

Così --supervise funziona solo con modalità cluster standalone, Se la domanda è presentata nel modo Yarn Cluster poi filato in grado di gestire il riavvio del driver come configurato nella proprietà mapreduce.am.max-tentativi in ​​mapred-site .xml, Quindi il tuo codice dovrebbe essere tale da rimuovere la directory di output e partire da zero altrimenti fallirà con l'errore della directory di output già esistente.

Problemi correlati