2015-09-15 2 views
24

Ho un lavoro Spark Streaming che è stato eseguito continuamente. Come posso interrompere il lavoro con garbo? Ho letto le solite raccomandazioni di collegare un gancio di arresto nel monitoraggio del lavoro e l'invio di un SIGTERM al lavoro.Come si interrompe un lavoro di streaming spark?

sys.ShutdownHookThread { 
    logger.info("Gracefully stopping Application...") 
    ssc.stop(stopSparkContext = true, stopGracefully = true) 
    logger.info("Application stopped gracefully") 
} 

Sembra funzionare ma non sembra il modo più pulito per interrompere il lavoro. Mi sto perdendo qualcosa qui?

Da un punto di vista del codice può avere senso, ma come si usa in un ambiente cluster? Se avviamo un lavoro spark in streaming (distribuiamo i lavori su tutti i nodi del cluster) dovremo tenere traccia del PID per il lavoro e il nodo su cui era in esecuzione. Infine, quando dobbiamo interrompere il processo, dobbiamo tenere traccia del nodo su cui è stato eseguito il lavoro e del PID. Speravo solo che ci sarebbe stato un modo più semplice di controllo dei lavori per i lavori di streaming.

+0

Cosa non ti sembra pulito? Penso che sia corretto. –

+0

Ho aggiunto qualche altro dettaglio alla domanda. – Saket

risposta

18

È possibile interrompere il contesto di streaming in modalità cluster eseguendo il seguente comando senza la necessità di inviare un SIGTERM. Ciò interromperà il contesto di streaming senza che sia necessario interromperlo esplicitamente utilizzando un hook di thread.

$SPARK_HOME_DIR/bin/spark-submit --master $MASTER_REST_URL --kill $DRIVER_ID

- $ MASTER_REST_URL è l'URL resto del conducente scintilla, vale a dire qualcosa come scintilla: // localhost: 6066

- $ DRIVER_ID è qualcosa come pilota-20150915145601-0.000

Se vuoi che la scintilla interrompa la tua app con garbo, puoi provare ad impostare la seguente proprietà di sistema quando l'app scintilla viene inizialmente inviata (vedi http://spark.apache.org/docs/latest/submitting-applications.html sull'impostazione delle proprietà di configurazione spark).

spark.streaming.stopGracefullyOnShutdown=true

questo non è ufficialmente documentato, e ho raccolto questo da guardare il codice sorgente di 1.4. Questa bandiera è onorato in modalità standalone. Non l'ho ancora testato in modalità cluster.

sto lavorando con scintilla 1.4. *

+0

Ciao, ud3sh, nel modello di cluster di filati e nella versione 1.3, come posso fare? – zwb

+3

'spark.streaming.stopGracefullyOnShutdown' è ora ufficialmente documentato nella pagina di configurazione spark http://spark.apache.org/docs/latest/configuration.html#spark-streaming – avr

+0

Cosa accade se si crea un'istanza di più lavori per contesto e si desidera interrompere posti di lavoro individualmente? –

0

Se tutto ciò che serve è solo interrompere l'esecuzione dell'applicazione in streaming, modo più semplice è quindi tramite l'interfaccia utente di Spark admin (puoi trovare l'URL nei log di avvio di Spark master).

C'è una sezione nell'interfaccia utente, che mostra le applicazioni di streaming in esecuzione, e ci sono piccoli pulsanti Url (kill) accanto a ciascun ID applicazione.

+0

Dove? Vedo solo piccoli pulsanti '(kill)' accanto a ogni * stage * (su un singolo ricevitore), ma se ne uccido uno di essi ne viene generato un altro rapidamente –