Uso lo streaming di Spark per contare utenti unici. Io uso updateStateByKey
, quindi ho bisogno di configurare una directory di checkpoint. Ho anche caricare i dati da posto di blocco mentre si avvia l'applicazione, come the example in the doc:Come configare il punto di controllo per ridistribuire l'applicazione spark streaming?
// Function to create and setup a new StreamingContext
def functionToCreateContext(): StreamingContext = {
val ssc = new StreamingContext(...) // new context
val lines = ssc.socketTextStream(...) // create DStreams
...
ssc.checkpoint(checkpointDirectory) // set checkpoint directory
ssc
}
// Get StreamingContext from checkpoint data or create a new one
val context = StreamingContext.getOrCreate(checkpointDirectory, functionToCreateContext _)
Ecco la domanda, se il mio codice viene cambiato, quindi ho ri-distribuire il codice, sarà il punto di controllo da caricare, non importa quanto il codice è cambiato? O ho bisogno di usare la mia logica per perseverare i miei dati e caricarli nella prossima esecuzione.
Se utilizzo la mia logica per salvare e caricare DStream, se l'applicazione si riavvia in caso di errore, i dati non verranno caricati sia dalla directory checkpoint sia dal mio database?