我使用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();
答案 0 :(得分:18)
使用 Spark Streaming 读取数据时,由于容错,传入的数据块会复制到至少另一个节点/工作线程。如果没有这种情况,可能会发生这样的情况:如果运行时从流中读取数据然后失败,则该特定数据将丢失(它已经从流中读取和擦除,并且它也在工作方丢失了,因为失败)。
当Spark Streaming驱动程序正在运行时,系统会收到 来自各种来源的数据,并将其分成批次。每批 数据被视为RDD,即不可变的并行 收集数据。这些输入RDD保存在内存中 复制到两个节点以实现容错。
您的情况下的警告意味着根本不会复制来自流的传入数据。原因可能是您只使用一个Spark worker实例或以本地模式运行应用程序。尝试启动更多Spark工作人员,看看警告是否消失。