Spark queueStream
中StreamingContext
函数的功能是什么。根据我的理解,它是一个队列,对传入的DStream
进行排队。如果是这种情况,那么如何在具有许多节点的集群中处理它。每个节点是否都有此queueStream
且DStream
是否在群集中的所有节点之间进行了分区?这个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上下文中执行上面的代码部分。
答案 0 :(得分:2)
QueueInputDStream
用于测试。它使用标准scala.collection.mutable.Queue
来存储模仿传入批次的RDDs
。
每个节点是否都有此queueStream,DStream是否在群集中的所有节点之间进行分区
没有。只有一个队列副本,所有数据分发由RDDs
处理。当compute
(dequeue
设置为oneAtATime
)或true
当前队列union
设置为{{1}时,oneAtATime
逻辑非常简单每个嘀嗒声。这通常适用于false
- 每个流只是一系列RDD,它们提供数据分发机制。
虽然它仍然遵循DStreams
API,但从概念上讲,它只是一个本地集合,您可以从中收集元素InputDStream
。