我正在运行一个火花流应用程序。该应用程序使用MapWithStateRDD来管理批次之间的状态。应用和设置详情:
除了MapWithStateRDD之外,我没有缓存或检查任何RDD,而Spark自动检查点。我注意到的是,存储选项卡不仅显示3(即60/20)MapWithStateRDDs,还有更多(查看附图)。随着处理更多批次,列表会继续变长。如何理解这一点?
代码段显示从kafka读取并使用mapwithState:
JavaInputDStream<ConsumerRecord<String, MyClass>> records = KafkaUtils.createDirectStream(
jssc,
LocationStrategies.PreferConsistent(),
ConsumerStrategies.<String, MyClass>Subscribe(topics, kafkaParams));
JavaPairDStream<String, MyClass> converted = records.mapToPair(consRecord -> {
return new Tuple2<String, MyClass>(consRecord.key(), consRecord.value());
});
JavaMapWithStateDStream<String, MyClass, Session, Session> stateDstream = converted.mapWithState(StateSpec.function(mappingFunc).timeout(Durations.minutes(Long.parseLong(conf.get("spark.state.timeout.interval")))).numPartitions(200));