Spark Streaming 警告信息:“仅复制到0个对等节点而不是1个对等节点”

14
我使用Spark Streaming从Twitter接收推文。 我经常会收到许多警告,内容如下:

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个回答

24

使用 Spark Streaming 读取数据时,由于容错机制,输入的数据块会被复制到至少另一个节点/工作器中。如果没有这种机制,可能会发生这样的情况,即在运行时从流中读取数据,然后失败时会丢失这个特定的数据片段(它已经被读取并从流中删除,并且由于故障也在工作器端丢失)。

参考 Spark 文档:

 

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

您的情况中的警告意味着来自流的输入数据根本没有被复制。原因可能是您只是使用一个 Spark 工作器实例或在本地模式下运行应用程序。尝试启动更多的 Spark 工作器,看看是否消除了警告。


2
有没有办法防止这些警告被输出到控制台? - Saqib Ali
2
将log4j.rootCategory=WARN, console更改为log4j.rootCategory=ERROR, console以静音日志记录在log4j.properties文件中。 - Saqib Ali
2
@SaqibAli 这会影响到很多我们不想要屏蔽的消息。更有针对性的解决方案是 log4j.loggr.org.apache.spark.storage=ERROR。在Spark下可能还有其他包需要静音 - 但最好不要全部都静音。 - WestCoastProjects
@javadba 可能应该是 log4j.logger.org.apache.spark.storage=ERROR,即使用“logger”而不是“loggr”。 - abel
true - 我手打了这段代码而不是复制粘贴。我无法直接修复注释,所以这里是正确的路径:log4j.logger.org.apache.spark.storage=ERROR - WestCoastProjects

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接