Spark Streaming 收到警告“仅复制到 0 个对等方,而不是 1 个对等体”

我使用火花流来接收来自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

使用 Spark 流式处理读取数据时,由于容错,传入的数据块将复制到至少一个其他节点/工作线程。如果没有这一点,如果运行时从流中读取数据然后失败,则可能会丢失此特定数据(它已经从流中读取并擦除,并且由于故障,它也会在工作端丢失)。

参考 Spark 文档

当 Spark 流式处理驱动程序运行时,系统从各种源接收数据并将其分成批。每批数据都被视为一个 RDD,即不可变的并行数据集合。这些输入RDD保存在内存中,并复制到两个节点以实现容错。

对于您的情况,警告意味着根本不会复制来自流的传入数据。其原因可能是你仅使用一个 Spark worker 实例或在本地模式下运行应用。尝试启动更多的 Spark worker,看看警告是否消失了。


答案 2

推荐