2015-09-15 10 views
8

Używam streamingu iskrowego do odbierania twittów ze Twittera. dostaję wiele ostrzeżenie, które mówi:Spark Streaming get warn "replikowane tylko na 0 peerów zamiast 1 peerów"

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

co to ostrzeżenie dla?

mojego kodu jest:

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(); 

Odpowiedz

14

Podczas odczytu danych z Spark Streaming przychodzące bloki danych są replikowane do co najmniej jednego innego węzła/pracownika z powodu błędu tolerancji. Bez tego może się zdarzyć, że w przypadku, gdy środowisko wykonawcze odczyta dane ze strumienia, a następnie się nie powiedzie, ta konkretna część danych zostanie utracona (została już przeczytana i usunięta ze strumienia, a także utracona po stronie pracownika z powodu awarii).

Nawiązując do Spark documentation:

Choć Spark Program kierowca żywo jest uruchomiony, system otrzyma danych z różnych źródeł, i dzieli go na partiach. Każda partia danych jest traktowana jako RDD, to jest niezmienna, równoległa kolekcja danych . Te wejściowe urządzenia RDD są zapisywane w pamięci, a są replikowane do dwóch węzłów w celu zapewnienia odporności na uszkodzenia.

Ostrzeżenie w twoim przypadku oznacza, że ​​przychodzące dane ze strumienia nie są w ogóle replikowane. Przyczyną tego może być uruchamianie aplikacji za pomocą tylko jednego wystąpienia pracownika Sparka lub działającego w trybie lokalnym. Spróbuj uruchomić więcej pracowników Sparka i sprawdź, czy ostrzeżenie zniknęło.

+0

Czy istnieje sposób, aby uniemożliwić wysyłanie tych WARN do konsoli? –

+2

Aby wyciszyć zmianę log4j.rootCategory = WARN, console to log4j.rootCategory = ERROR, konsola w pliku log4j.properties –

Powiązane problemy