2016-11-22 2 views
10

Wir alle wissen, dass Spark die Berechnung im Speicher ausführt. Ich bin nur neugierig auf die folgenden.Spark RDD - ist die Partition (en) immer im RAM?

  1. Wenn ich 10 RDD in meinem pySpark Shell erstellen aus HDFS, bedeutet es, alle diese 10 RDD s Daten auf Spark-Arbeiter-Speicher befinden werden?

  2. Wenn ich nicht löschen RDD, wird es für immer in Erinnerung sein?

  3. Wenn meine Daten-Set (Datei) Größe Größe verfügbar RAM überschreitet, wo Daten gespeichert?

+0

Im Speicher bedeutet ja seinen RAM. RDDs sind faul. Es gibt zwei Operationen auf RDD, die Transformationen und Aktionen genannt werden, es sei denn, eine Aktion (z. B. Zählung) wird aufgerufen, sie werden nicht agieren und rechnen. Beim Starten des Jobs werden wir Speicher (der Executor-Speicher im RAM ist) durch Funken senden oder auf andere Weise zuweisen. Würde [this] empfehlen (https://www.tutorialspoint.com/apache_spark/apache_spark_rdd.htm) –

Antwort

15

Wenn ich 10 RDD in meiner pySpark Schale aus HDFS schaffen, bedeutet es, alle diese 10 RDD Daten auf Spark-Speicher befinden werden?

Ja, Alle 10 RDDs Daten in Funkenarbeitscomputer verteilt wird RAM. aber nicht notwendig für alle Maschinen muss eine Partition von jeder RDD haben. Natürlich wird RDD Daten nur dann im Speicher haben, wenn eine Aktion ausgeführt wird, da sie nur langsam ausgewertet wird.

Wenn ich RDD nicht lösche, wird es für immer im Speicher bleiben?

Funken automatisch unpersist der RDD oder Datenrahmen, wenn sie nicht mehr verwendet werden. Um zu wissen, ob eine RDD oder ein Dataframe zwischengespeichert ist, können Sie in die Spark-UI -> Storage-Tabelle gelangen und die Details zum Speicher einsehen. Sie können df.unpersist() oder sqlContext.uncacheTable("sparktable") verwenden, um die df oder Tabellen aus dem Speicher zu entfernen. link to read more

Wenn meine Dataset Größe Größe verfügbar RAM überschreitet, wo Daten zu gespeichert?

Wenn der RDD in den Speicher passen nicht, werden einige Partitionen nicht zwischengespeichert werden und wird im laufenden Betrieb jedes Mal neu berechnet werden, wenn sie gebraucht werden. link to read more

Wenn wir sagen RDD ist bereits im RAM-Speicher, was bedeutet es im Speicher ist, was ist die Notwendigkeit zu bestehen()? --as pro Kommentar

Ihre Frage zu beantworten, wenn eine Aktion auf RDD ausgelöst und wenn diese Aktion nicht Speicher finden kann, kann es uncached/unpersisted RDDs entfernen.

Im Allgemeinen wir RDD bestehen, die viele Rechen benötigen oder/und schlurfende (standardmäßig Funken RDDs persist gemischt teure Netzwerk zu vermeiden I/O), so dass, wenn eine Aktion ausgeführt auf RDD beharrte, einfach wird es diese Aktion nur durchführen, anstatt es vom Anfang wieder zu berechnen, gemäß dem Liniengraphen check RDD persistence levels here.

+0

Sieht besser aus. Sie sollten erwähnen, dass es nicht erforderlich ist, alle Daten zu jeder Zeit im Speicher zu behalten. –

+0

@mrsrinivas - "Ja, alle 10 RDDs werden sich im Arbeitsspeicher von spark worker maschi- nen verbreiten." (Nach Durchführung einer Aktion) - wenn dies der Fall ist, müssen wir eine RDD mit persist() oder persistent markieren cache() -Methoden darauf? – Dipankar

+1

Wir behalten/cachen rdds, um zu vermeiden, dass CPU/Speicher/io intensive Operationen/Jobs in den nächsten Schritten erneut ausgeführt werden. – mrsrinivas

6

Wenn ich 10 RDD in meiner Pypspark Shell erstelle, bedeutet das, dass alle diese 10 RDD Daten auf Spark Memory liegen?

Antwort: RDD enthält nur das "Lineage-Diagramm" (die angewandten Transformationen). Also, RDD ist keine Daten !!! Wann immer wir eine Aktion auf einer RDD ausführen, werden alle Transformationen vor der Aktion angewendet. Also wenn nicht explizit (natürlich gibt es einige Optimierungen, die implizit zwischenspeichern) zwischengespeichert, wird bei jeder durchgeführten Aktion die gesamte Transformation und Aktion erneut durchgeführt !!!

Zum Beispiel: Wenn Sie eine RDD aus HDFS erstellen, einige Transformationen anwenden und 2 Aktionen auf der transformierten RDD durchführen, werden HDFS-Lesevorgänge und Transformationen zweimal ausgeführt !!!

Wenn Sie also die Neuberechnung vermeiden möchten, müssen Sie die RDD beibehalten. Für das Fortbestehen haben Sie die Wahl aus einer Kombination von einem oder mehreren auf HEAP, Off-Heap, Disk.

Wenn ich RDD nicht lösche, wird es für immer in Erinnerung bleiben?

Antwort: Wenn man bedenkt, dass RDD nur ein "Lineage-Diagramm" ist, wird es dem gleichen Umfang und der gleichen Lebenszeit-Regel der Hosting-Sprache folgen. Aber wenn Sie das berechnete Ergebnis bereits beibehalten haben, könnten Sie unpersistieren !!!

Wenn meine Datenmenge die verfügbare RAM-Größe überschreitet, wo werden Daten gespeichert?

Antwort: Angenommen, Sie haben die RDD im Speicher gespeichert/zwischengespeichert, wird sie im Speicher gespeichert. Und LRU wird verwendet, um Daten zu vertreiben. Refer für weitere Informationen zur Speicherverwaltung in Spark.

+0

Angenommen, es gibt nur eine HDFS-Lese-, Umwandlungs- und Aktion, die ausgeführt werden muss, und wenn das zu berechnende Dataset dreimal so groß ist wie RAM, wie werden die Daten in RDD-Partitionen in den Speicher geladen? – Kannan

+0

Ein Worker muss einen Puffer haben, um die Daten einer einzelnen Partition zu halten, und einen Puffer, der benötigt wird, um die Daten zu verarbeiten, andernfalls wird der Arbeiter abstürzen !!! Die Partitionierungsstrategie muss dies berücksichtigen !!! – rakesh

+0

Danke Rakesh für die Klarstellung. Daher sollte die Größe des Puffers größer als mindestens eine Partitionsgröße sein. Gibt es einen Link, der mir mehr Informationen dazu gibt? Noch einmal vielen Dank. – Kannan