2016-05-05 19 views
1

Ich bin mir nicht sicher über das Konzept der Speicherfußabdruck. Beim Laden einer Parkettdatei von z. 1 GB und Erstellen von RDDs daraus in Spark, Was wäre der Speicher Lebensmittel drucken für jede RDD?RDD Speicherbedarf in Funken

Antwort

2

Wenn Sie eine RDD aus einer Parkettdatei erstellen, wird nichts geladen/ausgeführt, bis Sie eine Aktion auf der RDD ausführen (z. B. zuerst erfassen).

Ihr Speicherbedarf wird sich wahrscheinlich im Laufe der Zeit ändern. Angenommen, Sie haben 100 Partitionen und sie sind gleich groß (jeweils 10 MB). Angenommen, Sie laufen auf einem Cluster mit 20 Kernen, dann müssen Sie zu einem beliebigen Zeitpunkt nur 10MB x 20 = 200MB Daten im Speicher haben.

Um hinzuzufügen, dass Java-Objekte dazu neigen, mehr Platz zu belegen, ist es nicht einfach zu sagen, wie viel Speicherplatz Ihre 1GB-Datei im JVM-Heap benötigt (vorausgesetzt, Sie laden die gesamte Datei). Es könnte 2x oder mehr sein.

Ein Trick, den Sie tun können, um dies zu testen, ist, Ihre RDD im Cache zu speichern. Sie können dann in der Spark UI unter Storage nachsehen, wie viel Speicherplatz der RDD zum Zwischenspeichern beansprucht hat.

+0

Danke für die Antwort marios. Wenn Sie Partitionen erwähnen, sind es die RDDs, die aus der Parkettdatei erstellt wurden? Und da RDDs keine physischen Entitäten sind, gibt es nur Daten im Speicher basierend auf der Aktion, die wir ausführen. Bin ich damit richtig? Könnte es auch ungleiche Partitionen geben? –

+1

Alle RDDs sind partitioniert, sonst gibt es keine Parallelität. Sie haben Recht, RDDs werden nicht materialisiert, bis sie es brauchen (sie sind faul). Wenn es sich um eine große Parkettfeile handelt, sollte sie gleichmäßig verteilt sein. Ja, es gibt Fälle, in denen Partitionen impaziert werden, besonders wenn die RDD aus vielen kleineren Dateien anstatt aus einem großen erzeugt wird. – marios

0

Marios, in Ihrer Speicherprojektion haben Sie die Kompression von Parkett nicht berücksichtigt. 1 GB könnte sehr gut 5 GB unkomprimiert sein.