在SparkStreaming中使用queueStream的功能和执行?

时间:2017-08-19 05:45:23

标签: apache-spark spark-streaming

Spark queueStreamStreamingContext函数的功能是什么。根据我的理解,它是一个队列,对传入的DStream进行排队。如果是这种情况,那么如何在具有许多节点的集群中处理它。每个节点是否都有此queueStreamDStream是否在群集中的所有节点之间进行了分区?这个queueStream如何在群集设置中工作?

我已经在[Spark Streaming documentation] [https://spark.apache.org/docs/latest/streaming-programming-guide.html#basic-sources)中阅读了以下解释,但我完全不理解。请帮我理解。

  

RDD作为流的队列:为了使用测试数据测试Spark Streaming应用程序,还可以使用streamingContext.queueStream(queueOfRDDs)基于RDD队列创建DStream。推入队列的每个RDD将被视为DStream中的一批数据,并像流一样处理。

val myQueueRDD= scala.collection.mutable.Queue[RDD[MyObject]]()
val myStream= ssc.queueStream(myQueueRDD)

for(count <- 1 to 100) {
        val randomData= generateData() //Generated random data
        val rdd= ssc.sparkContext.parallelize(randomData) //Creates the rdd of the random data.
        myQueueRDD+= rdd //Addes data to queue.
}

myStream.foreachRDD(rdd => rdd.mapPartitions(data => evaluate(data)))

如何在关于不同节点上的分区的spark spark上下文中执行上面的代码部分。

1 个答案:

答案 0 :(得分:2)

QueueInputDStream用于测试。它使用标准scala.collection.mutable.Queue来存储模仿传入批次的RDDs

  

每个节点是否都有此queueStream,DStream是否在群集中的所有节点之间进行分区

没有。只有一个队列副本,所有数据分发由RDDs处理。当computedequeue设置为oneAtATime)或true当前队列union设置为{{1}时,oneAtATime逻辑非常简单每个嘀嗒声。这通常适用于false - 每个流只是一系列RDD,它们提供数据分发机制。

虽然它仍然遵循DStreams API,但从概念上讲,它只是一个本地集合,您可以从中收集元素InputDStream