2015-09-15 26 views
8

Uso lo spark streaming per ricevere le twitts da Twitter. Ricevo molte avvertimento che dice:Spark Streaming avverti "replicato su 0 peer (s) invece di 1 peer"

replicated to only 0 peer(s) instead of 1 peers 

che cosa è questo avvertimento per?

mio codice è:

SparkConf conf = new SparkConf().setAppName("Test"); 
    JavaStreamingContext sc = new JavaStreamingContext(conf, Durations.seconds(5)); 
    sc.checkpoint("/home/arman/Desktop/checkpoint"); 

    ConfigurationBuilder cb = new ConfigurationBuilder(); 
    cb.setOAuthConsumerKey("****************") 
     .setOAuthConsumerSecret("**************") 
     .setOAuthAccessToken("*********************") 
     .setOAuthAccessTokenSecret("***************"); 


    JavaReceiverInputDStream<twitter4j.Status> statuses = TwitterUtils.createStream(sc, 
      AuthorizationFactory.getInstance(cb.build())); 

    JavaPairDStream<String, Long> hashtags = statuses.flatMapToPair(new GetHashtags()); 
    JavaPairDStream<String, Long> hashtagsCount = hashtags.updateStateByKey(new UpdateReduce()); 
    hashtagsCount.foreachRDD(new saveText(args[0], true)); 

    sc.start(); 
    sc.awaitTerminationOrTimeout(Long.parseLong(args[1])); 
    sc.stop(); 

risposta

14

Durante la lettura di dati con Spark Streaming, blocchi di dati in entrata vengono replicati ad almeno un altro nodo/lavoratore a causa della tolleranza agli errori. Senza di ciò può accadere che nel caso in cui il runtime legge i dati dal flusso e poi fallisce questo particolare pezzo di dati andrebbe perso (è già letto e cancellato dal flusso ed è anche perso dal lato del lavoratore a causa di un errore).

Riferendosi alla Spark documentation:

Mentre un programma Spark driver Flusso è in esecuzione, il sistema riceve dati provenienti da fonti diverse e e la divide in lotti. Ogni lotto di dati viene considerato come un RDD, ovvero una raccolta di dati parallela immutabile . Questi RDD di input vengono salvati in memoria e replicati su due nodi per la tolleranza di errore.

L'avviso nel tuo caso indica che i dati in entrata dal flusso non vengono affatto replicati. Il motivo potrebbe essere che si esegue l'app con una sola istanza di Spark worker o in esecuzione in modalità locale. Cerca di avviare altri lavoratori Spark e vedere se l'avvertimento è sparito.

+0

C'è un modo per impedire che questi WARN vengano inviati alla console? –

+2

Per disattivare la modifica log4j.rootCategory = WARN, console per log4j.rootCategory = ERRORE, console nel file log4j.properties –