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

Arm*_*man 11 java streaming twitter4j apache-spark spark-streaming

我使用spark streaming来接收来自twitter的twitts.我收到许多警告说:

replicated to only 0 peer(s) instead of 1 peers
Run Code Online (Sandbox Code Playgroud)

这个警告是什么?

我的代码是:

    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();
Run Code Online (Sandbox Code Playgroud)

van*_*jar 20

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

参考Spark文档:

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

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

  • 有没有办法防止这些WARN输出到控制台? (2认同)
  • 要将log4j.rootCategory = WARN,控制台改为log4j.rootCategory = ERROR,将控制台置于log4j.properties文件中 (2认同)
  • @SaqibAli这会影响很多我们不希望隐藏的消息。更具针对性的解决方案是`log4j.loggr.org.apache.spark.storage = ERROR`。火花下可能还有其他* sub *软件包应该被静音-但最好不是全部* (2认同)