2017-08-19 3 views
3

Was ist die Funktionalität der queueStream Funktion in Spark StreamingContext. Nach meinem Verständnis ist es eine Warteschlange, die die eingehenden DStream in die Warteschlange stellt. Wenn dies der Fall ist, dann wie wird es im Cluster mit vielen Knoten behandelt. Hat jeder Knoten diese queueStream und die DStream ist unter allen Knoten im Cluster partitioniert? Wie funktioniert das queueStream in Cluster-Setup?Funktionalität und Ausführung von queueStream in SparkStreaming?

Ich habe die folgende Erklärung in der [Spark Streaming Dokumentation] [https://spark.apache.org/docs/latest/streaming-programming-guide.html#basic-sources] gelesen, aber ich habe es nicht vollständig verstanden. Bitte hilf mir, es zu verstehen.

Queue von RDDs als Stream: für eine Spark-Streaming-Anwendung mit den Testdaten zu testen, kann man auch eine DSTREAM erstellen, die auf eine Warteschlange von RDDs basiert, unter Verwendung von streamingContext.queueStream (queueOfRDDs). Jede RDD, die in die Warteschlange eingereiht wird, wird in DStream als Stapel von Daten behandelt und wie ein Stream verarbeitet.

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))) 

Wie der obige Teil des Codes wird im Funken Streaming Zusammenhang mit Bezug auf Partitionen auf verschiedenen Knoten ausgeführt werden sollen.

Antwort

2

QueueInputDStream ist zum Testen vorgesehen. Es verwendet Standard scala.collection.mutable.Queue, um RDDs zu speichern, die eingehende Stapel imitieren.

Hat jeder Knoten dieses queueStream sind und die DSTREAM wird zwischen allen Knoten in dem Cluster partitioniert

No. Es gibt nur eine Kopie der Warteschlange und alle Datenverteilung durch RDDs gehandhabt wird. compute Logik ist sehr einfach mit dequeue (oneAtATime auf true gesetzt) ​​oder union10 der aktuellen Warteschlange (oneAtATime auf false gesetzt) ​​bei jedem Tick. Dies gilt im Allgemeinen für DStreams - jeder Stream ist nur eine Sequenz von RDDs, die Datenverteilungsmechanismus bereitstellen.

Während es noch folgt InputDStream API, konzeptionell ist es nur eine lokale Sammlung, aus denen Sie Elemente alle batchDuration nehmen.

+1

Sie holen mich ein! ;-) – eliasah

+0

Ja. Wenn es nur eine Warteschlange gibt, wie die RDD-Verteilung geschieht, ist dies der Teil, den ich klar haben möchte. Wenn sich die Warteschlange nur im Treiber befindet, partitionieren und berechnen Sie, wie es parallel in allen Knoten passiert. –

+0

Können Sie bitte die Bearbeitung der Frage auschecken, die Klarheit über meine Zweifel @ user6910411 gibt –

Verwandte Themen