Spark Streaming被警告"仅复制到0个对等体而不是1个对等体#34;

时间:2015-09-15 10:07:37

标签: java apache-spark streaming twitter4j spark-streaming

我使用spark stream从twitter接收twitts。 我收到很多警告说:

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

这是什么警告?

我的代码是:

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

1 个答案:

答案 0 :(得分:18)

使用 Spark Streaming 读取数据时,由于容错,传入的数据块会复制到至少另一个节点/工作线程。如果没有这种情况,可能会发生这样的情况:如果运行时从流中读取数据然后失败,则该特定数据将丢失(它已经从流中读取和擦除,并且它也在工作方丢失了,因为失败)。

参考Spark documentation

  

当Spark Streaming驱动程序正在运行时,系统会收到   来自各种来源的数据,并将其分成批次。每批   数据被视为RDD,即不可变的并行   收集数据。这些输入RDD保存在内存中   复制到两个节点以实现容错。

您的情况下的警告意味着根本不会复制来自流的传入数据。原因可能是您只使用一个Spark worker实例或以本地模式运行应用程序。尝试启动更多Spark工作人员,看看警告是否消失。