gpt4 book ai didi

apache-spark - Spark Streaming 中队列流的功能和执行?

转载 作者:行者123 更新时间:2023-12-01 19:34:33 24 4
gpt4 key购买 nike

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

我已阅读 [Spark Streaming 文档][ https://spark.apache.org/docs/latest/streaming-programming-guide.html#basic-sources 中的以下解释), 但我没有完全理解。请帮助我理解它。

Queue of RDDs as a Stream: For testing a Spark Streaming application with test data, one can also create a DStream based on a queue of RDDs, using streamingContext.queueStream(queueOfRDDs). Each RDD pushed into the queue will be treated as a batch of data in the DStream, and processed like a stream.

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 streaming 上下文中执行。

最佳答案

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

Does each node will have this queueStream and the DStream is partitioned among all the nodes in the cluster

没有。队列只有一个副本,所有数据分发都由 RDDs 处理。 compute 逻辑非常简单,dequeue(oneAtATime 设置为 true)或union当前队列的时间(oneAtATime 设置为 false)。这通常适用于 DStreams - 每个流只是一个 RDD 序列,它提供数据分发机制。

虽然它仍然遵循 InputDStream API,但从概念上讲,它只是一个本地集合,您可以在每个 batchDuration 期间从中获取元素。

关于apache-spark - Spark Streaming 中队列流的功能和执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45768115/

24 4 0