对于一个类项目,我需要一个Spark Java程序作为Kafka使用者进行监听,并将所有Kafka主题收到的消息写入文件(例如“/user/zaydh/my_text_file.txt”)。
我能够以JavaPairReceiverInputDStream
对象的形式接收消息;我也可以将它转换为JavaDStream<String>
(这来自Spark Kafka示例)。
但是,我找不到一个好的Java语法来将这些数据写入基本上是单个日志文件的内容。我尝试在foreachRDD
对象上使用JavaDStream
,但我找不到一种干净,并行安全的方法将其下沉到单个日志文件中。
我知道这种方法是非传统的或非理想的,但这是一项要求。非常感谢任何指导。
答案 0 :(得分:1)
当你想到一个流时,你必须把它想象成不会停止发布数据的东西。
因此,如果Spark流有一种方法来保存所有进入单个文件的RDD,它会继续增长到一个巨大的大小(并且流不应该停止记住?:))
但在这种情况下,您可以使用RDD的saveAsTextFile实用程序,
这会在输出目录中创建多个文件,具体取决于创建流式上下文时指定的批处理间隔JavaStreamingContext jssc = new JavaStreamingContext(conf, Durations.seconds(1))