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工作人员,看看警告是否消失.