使用文本文件作为Spark流媒体源进行测试

时间:2015-07-08 13:20:41

标签: testing spark-streaming

我想为消耗水槽源的火花流应用程序编写一个测试。

http://mkuthan.github.io/blog/2015/03/01/spark-unit-testing/建议使用ManualClock,但目前读取文件并验证输出对我来说已足够。

所以我希望使用:

JavaStreamingContext streamingContext = ...
JavaDStream<String> stream = streamingContext.textFileStream(dataDirectory);
stream.print();
streamingContext.awaitTermination();
streamingContext.start();

不幸的是它没有打印任何东西。

我试过了:

  • dataDirectory =“hdfs:// node:port / absolute / path / on / hdfs /”
  • dataDirectory =“file:// C:\\ absolute \\ path \\ on \\ windows \\”
  • 在程序开始之前在目录中添加文本文件
  • 在程序运行的目录中添加文本文件

没有任何作用。

有任何建议从文本文件中读取吗?

谢谢,

马丁

2 个答案:

答案 0 :(得分:9)

启动和等待的顺序确实被颠倒了。

除此之外,将数据传递到Spark Streaming应用程序进行测试的最简单方法是QueueDStream。它是任意数据的RDD的可变队列。这意味着您可以以编程方式创建数据或将其从磁盘加载到RDD中并将其传递给Spark Streaming代码。

EG。为了避免fileConsumer面临的时间问题,你可以试试这个:

val rdd  = sparkContext.textFile(...)
val rddQueue: Queue[RDD[String]] = Queue()
rddQueue += rdd
val dstream = streamingContext.queueStream(rddQueue)
doMyStuffWithDstream(dstream)
streamingContext.start()
streamingContext.awaitTermination()

答案 1 :(得分:0)

我是如此愚蠢,我反过来调用start()和awaitTermination()

如果你想这样做,你应该从HDFS读取,并在程序运行时添加文件。