2016-07-12 13 views
1

Ich bin neu zu funken und allgemeine Frage zu haben. Soweit ich weiß, muss die ganze Datei auf allen Worker-Knoten zur Verfügung stehen. Wenn ja, wie wissen sie, welche Partition sollte lesen? Treiber steuert die Partitionen, aber wie sagt Ihnen der Treiber, welche Partition er lesen soll?Datenverteilung in Apache Spark

Antwort

0

Jede RDD ist in mehrere Partitionen unterteilt. Zur Berechnung jeder Partition generiert Spark eine Aufgabe und weist sie einem Worker-Knoten zu. Wenn der Treiber eine Aufgabe an den Worker sendet, gibt er auch die Partitions-ID dieser Aufgabe an.

Der Worker führt die Task dann aus, indem er den Iterator des RDD vollständig an den InputRDD ankettet und die PartitionsID weiterleitet. Das InputRDD bestimmt, welcher Teil der Eingabe der angegebenen Partitions-ID entspricht, und gibt die Daten zurück.

rddIter.next -> parentRDDIter.next -> grandParentRDDIter.next -> ... -> InputRDDIter.next 
0

Spark versucht, Daten von den Knoten, die sich in der Nähe befinden, in eine RDD zu lesen. Da Spark in der Regel auf verteilte partitionierte Daten zugreift, werden zur Optimierung von Umwandlungsoperationen Partitionen erstellt, die die Datenblöcke enthalten.

enter image description here

https://github.com/jaceklaskowski/mastering-apache-spark-book

+0

Haben Sie bedeuten, dass Arbeiter alle ihre Partitionen zuerst holen und sie dann verarbeiten? – saeed