Optimierungstechniken für eine verteilte In-Memory-Computing-Plattform durch Nutzung von SSD Teil 2

Aug 17, 2023

3.1. Cluster-Umgebung

Abbildung 1 zeigt unseren Testbed-Cluster, der aus einem Namensknoten (Master) und vier Datenknoten (Slaves) besteht. Im Namensknoten (Master) haben wir den NameNode und den sekundären NameNode von Hadoop (HDFS) sowie den Treiberknoten (Masterknoten) von Spark konfiguriert. In jedem Datenknoten führen wir den DataNode von Hadoop (HDFS) und den Worker Node von Spark aus. Die Namensknoten- und Datenknotenmaschinen verfügen über die gleichen H/W-Umgebungen (3,4 GHz Xeon E3-1240V3 QuadCore-Prozessor mit Hyper-Threading), mit Ausnahme der Menge an Hauptspeicher (8 GB für den Namensknoten und 4 GB). für jeden Datenknoten).

Namename ist der Masterknoten in der Hadoop-Architektur, der für die Verwaltung und Überwachung des Dateisystems des gesamten Hadoop-Clusters verantwortlich ist. Der Namename-Knoten ist auch einer der kritischen Knoten des gesamten Hadoop-Clusters, und seine Leistung und Zuverlässigkeit wirken sich direkt auf die Betriebseffizienz und Verfügbarkeit des gesamten Hadoop-Clusters aus.

Es gibt viele Indikatoren im Zusammenhang mit dem Namename-Knoten. Einer der wichtigsten Indikatoren ist der Speicher. Der Namename-Knoten benötigt viel Speicher zum Speichern und Verwalten des Namespace des gesamten HDFS-Dateisystems, einschließlich Metadateninformationen von Dateien und Verzeichnissen wie Dateinamen, Berechtigungen, Zeitstempel, Dateigrößen usw.

Der Speicher des Namename-Knotens bestimmt nicht nur die Anzahl der Dateien, die er verwalten kann, und die Größe des Dateisystems, sondern beeinflusst auch die Leistung und Zuverlässigkeit des Hadoop-Clusters. Wenn der Namename-Knoten nicht über ausreichend Arbeitsspeicher verfügt, kann er nicht schnell auf Client-Anfragen reagieren, was zu einem verringerten Durchsatz des gesamten Hadoop-Clusters führt. Darüber hinaus können bei einem Ausfall des Namename-Knotens die darin gespeicherten Metadateninformationen verloren gehen, sodass das gesamte HDFS-Dateisystem nicht mehr verfügbar ist.

Daher ist im Hadoop-Cluster der Speicher des Namename-Knotens von entscheidender Bedeutung. Es wird empfohlen, dass Administratoren die geeignete Namename-Knoten-Hardwarekonfiguration basierend auf spezifischen Geschäftsanforderungen auswählen und regelmäßig die Leistung und Verfügbarkeit der Namename-Knoten überwachen, um sicherzustellen, dass sie effiziente und zuverlässige Dienste für den gesamten Hadoop-Cluster bereitstellen können. Es ist ersichtlich, dass wir unser Gedächtnis verbessern müssen. Cistanche kann das Gedächtnis erheblich verbessern, da Fleischpaste ein traditionelles chinesisches Arzneimittel mit vielen einzigartigen Wirkungen ist, darunter die Verbesserung des Gedächtnisses. Die Wirksamkeit von Hackfleisch beruht auf verschiedenen Wirkstoffen, darunter Carbonsäure, Polysaccharide, Flavonoide usw. Diese Inhaltsstoffe können über verschiedene Kanäle die Gesundheit des Gehirns fördern.

improving brain function

Klicken Sie auf „Ergänzungen kennen, um das Gedächtnis zu stärken“.

Als Speicherplätze haben wir zwei SSDs verwendet, wobei jeweils eine 120 GB große SATA3-SSD für das Betriebssystem und eine 512 GB große SATA3-SSD für das HDFS bestückt ist. Darüber hinaus kann die 512 GB große SATA3-SSD effektiv genutzt werden, um die Bandbreite des nicht ausreichenden Hauptspeichers zum Zwischenspeichern der RDDs von Spark zu erweitern. Alle Knoten, einschließlich des Namensknotens und des Datenknotens, sind mit einem 1-Gbit-Ethernet-Switch verbunden, wie in Abbildung 1 dargestellt. Tabelle 2 zeigt die Zusammenfassung der Hardware- und Softwarekonfigurationen in jedem Datenknoten unseres Testbed-Clusters.

boost memory

10 ways to improve memory

3.2. Spark JVM-Heap

Ein Spark-Job wird als Java-Prozess auf der Java Virtual Machine (JVM) ausgeführt, und Spark nutzt Scala, eine von Java erweiterte funktionale Sprache. Der Worker-Prozess von Spark läuft auch auf der JVM jedes Datenknotens, sodass der Worker-Prozess auf jedem Datenknoten über den JVM-Heap im Hauptspeicher verfügt, wie in Abbildung 2 dargestellt. Wenn Spark einen Job sendet, hat der Worker-Prozess diesen Der JVM-Heap führt den Job als verteilte Aufgaben aus.

short term memory how to improve

Wir können das Verhältnis der JVM-Heap-Größe eines Spark-Workers über die Konfigurationsdatei spark-defaults anpassen. conf im Verzeichnis spark/conf/. In der Spark-Datei defaults.conf ist der Wert von spark.executor.memory die JVM-Heap-Größe, wobei der Standardwert 512 MB beträgt, die jeder Worker-Knoten im Datenknoten nutzen kann. Darüber hinaus ist der Wert von spark.storage.safetyFraction auf 0.9 festgelegt, was bedeutet, dass Spark bis zu 90 % der JVM-Heap-Größe (auch als Sicherheitsbereich bezeichnet) nutzen kann. Dadurch soll verhindert werden, dass die JVM aufgrund des Mangels an verfügbarem Hauptspeicher während der Aufgabenverarbeitung OOM-Fehler (Out of Memory) generiert.

In diesem Sicherheitsbereich ist der gesamte JVM-Heap-Speicherplatz in drei Unterbereiche unterteilt: Unroll-, Speicher- und Shuffle-Bereiche, wie in Abbildung 2 dargestellt. Der Unroll-Speicherplatz wird zum Entrollen von Datenblöcken im Speicher verwendet. Wenn ein RDD auf anderen Speichermedien wie einer SSD oder HDD zwischengespeichert wird, die sich nicht im Hauptspeicher befinden, sollte das RDD serialisiert werden. Wenn Spark dann dieses RDD wieder in den Speicher liest, muss das RDD entrollt werden. Der Speicherplatz wird zum Zwischenspeichern eines RDD verwendet. Wenn der Speicherplatz zum Zwischenspeichern des RDD nicht ausreicht, können einige RDDs basierend auf der LRU-Richtlinie (zuletzt verwendet) aus diesem Bereich entfernt oder auf anderen Speichermedien wie einer SSD zwischengespeichert werden. Der Shuffle-Space wird zum Mischen der Zwischendaten verwendet. Dieser Shuffle-Space kann bei iterativen Anwendungen wie maschinellem Lernen eine wichtige Rolle spielen, da er die Gesamtzeit für die Auftragserledigung erheblich beeinflussen kann.

In der Standard-Spark-Konfiguration weisen die Speicher- und Shuffle-Bereiche des JVM-Heaps Kapazitätsanteilverhältnisse von {{0}},6 bzw. 0,2 (d. h. 60) auf. % des Sicherheitsbereichs für die Lagerung und 20% für das Mischen). Der Abrollspeicherplatz beansprucht standardmäßig 20% des Speicherplatzes. Die Kapazität dieser drei Bereiche des JVM-Heaps kann durch einen Funken festgelegt werden. storage.unrollFraction, spark.storage.memoryFraction und spark.shuffle.memoryFraction. In unserem Testbed-Cluster können wir beispielsweise den spark.executor.memory auf 2,6 GB des 4 GB großen Speichers des Worker-Knotens festlegen, was bedeutet, dass die JVM-Heap-Größe auf maximal 2,6 GB festgelegt ist. Dann betragen die tatsächlichen Kapazitäten von Speicherplatz und Shuffle-Speicherplatz 2,6 GB × 0,9 × 0,6 = 1,4 GB und 2,6 GB × 0,9 × 0,2=0,46 GB. jeweils. Dementsprechend benötigt der Abrollspeicher 1,4 GB × 0,2=0,28 GB.

3.3. RDD-Caching-Richtlinie

Die Spark-Plattform bietet vielfältige RDD-Caching-Optionen für Hauptspeicher und Festplatten. Die Standardoption ist MEMORY_ONLY, wobei das RDD im in Abschnitt 3.2 beschriebenen Speicherplatz als nicht serialisiertes Java-Objekt verwaltet wird. Wenn dieser Speicherplatz nicht ausreicht, um alle RDDs aufzunehmen, werden einige von ihnen basierend auf einer vordefinierten Cache-Ersetzungsrichtlinie aus dem Hauptspeicher entfernt. Wenn jedoch für die Aufgabenverarbeitung ein nicht zwischengespeichertes RDD erforderlich ist, sollte dieses RDD auf der Grundlage der Herkunftsinformationen neu erstellt werden, was zu erheblichen Leistungseinbußen in dieser MEMORY_ONLY-Caching-Richtlinie führen kann.

Neben der Option MEMORY_ONLY bietet Spark alternative Optionen für MEMORY_AND_DISK, DISK_ONLY und OFF_HEAP. Die Option MEMORY_AND_DISK speichert RDDs auf der nichtflüchtigen Festplatte, wenn der Speicherplatz nicht ausreicht, um alle erforderlichen RDDs zu speichern. Festplatten können aus Festplatten oder SSDs bestehen; Allerdings haben normale Spindelfestplatten einen relativ schlechten Lese-/Schreibdurchsatz, sodass die Gesamtausführungszeit länger sein kann als die der Caching-Option MEMORY_ONLY. Um dieses Problem anzugehen, können wir SSDs effektiv einsetzen, was möglicherweise die Gesamtzeit für die Auftragserledigung im Vergleich zum normalen HDD-basierten Ansatz verkürzen kann.

improve cognitive function

Die Option DISK_ONLY speichert RDDs nur in nichtflüchtigen Speichergeräten wie HDDs oder SSDs, also nicht im Hauptspeicher. Ein Cluster, der nicht über ausreichend verfügbaren Speicher verfügt, kann mit dieser Option eine gute Leistung erzielen. Da RDD in diesem Fall nur auf Datenträgern gespeichert wird, kann der Shuffle-Speicherplatz erweitert werden, anstatt den Speicherplatz des Arbeitsspeichers zu nutzen. Infolgedessen können wir beim Ausführen einer Anwendung wie PageRank, die eine relativ große Menge an Shuffle-Daten generiert, eine bessere Leistung beobachten als im MEMORY_ONLY-Fall.

Die Option OFF_HEAP ermöglicht Spark die Nutzung von Off-Heap-Speicherplatz, der außerhalb der Verwaltung des Java Garbage Collectors liegt. Wenn wir also Off-Heap-Speicherplatz verwenden, müssen wir uns mit komplizierten Speicheroperationen wie Zuweisung/Freigabe und Serialisierung/Deserialisierung befassen. Aus praktischen Gründen verwenden wir daher nicht die OFF_HEAP-Konfiguration.

3.4. Optimierungsmethodik

Wie wir in den Abschnitten 3.2 und 3.3 besprochen haben, umfassen unsere Optimierungsmethoden (1) die Konfiguration des Spark-JVM-Heaps und (2) die experimentellen Optionen der RDD-Caching-Richtlinie wie folgt:

1. Spark-JVM-Heap-Konfiguration: Wir haben die Auswirkungen einer Änderung der Kapazitätsanteilverhältnisse der Shuffle- und Speicherplätze untersucht. Das Verhältnis von Misch- und Speicherplatz beträgt 60 %:30 %, 50 %:40 % bzw. 20 %:60 %. Das Misch- und Speicherverhältnis „20 %:60 %“ ist der Standardwert im Spark-Setup. Wir wählen „60 %:30 %“, um das Ergebnis mit ausreichend Shuffle-Speicherplatz zu kontrastieren und konfigurieren „50 %:40 %“, um die Leistung ausgewogen darzustellen.

2. RDD-Caching-Richtlinie: Wir haben auch die Auswirkungen verschiedener RDD-Caching-Richtlinien untersucht. Wir haben die Leistung verschiedener Richtlinien wie OFF_HEAP, MEMORY_ONLY, MEMORY_AND_DISK und DISK_ONLY verglichen, wobei DISK bezeichnet die SSD in diesem Experiment.

Tabelle 3 zeigt insgesamt 12 verschiedene experimentelle Konfigurationen basierend auf den RDD-Caching-Richtlinien und den Spark-JVM-Kapazitätsanteilverhältnissen. In den mit „_1“ gekennzeichneten Experimentkonfigurationen (z. B. „N_1“) legen wir 60 % des Spark-JVM-Heaps für das Shuffling und 30 % für Speicherplätze fest. Bei denen mit der Bezeichnung „_2“ legen wir 50 % des Spark-JVM-Heaps für das Shuffling und 40 % für die Speicherung fest. Schließlich legen wir für diejenigen, die mit „_3“ gekennzeichnet sind, 20 % des Spark-JVM-Heaps für das Shuffling und 60 % für die Speicherung fest, wie aus den Spalten „Option“, „Shuffle“ und „Storage“ ersichtlich ist in Tabelle 3. Beachten Sie, dass die maximale Speichergröße des Executors unseres Testbed-Clusters 2,7 GB beträgt, d. h. jeder Worker-Knoten verfügt über 2,7 GB als Spark-JVM-Heap-Größe.

ways to improve memory

In Bezug auf die RDD-Caching-Richtlinie dient die Option „N“ dazu, das RDD nicht zwischenzuspeichern, die Option „M“ dient dazu, das RDD nur im Speicher zwischenzuspeichern, und die Option „M&S“ dient dazu, das RDD gemeinsam im Speicher und auf der SSD zwischenzuspeichern. und schließlich dient die Option „S“ nur zum Zwischenspeichern des RDD auf der SSD.

Durch unsere Experimente schlagen wir Optimierungsstrategien vor, die die beste Leistung aus dem Cluster mit unzureichenden Speichermengen erzielen können, indem wir die Spark-JVM-Heap-Konfiguration sorgfältig anpassen und eine effektive RDD-Caching-Richtlinie anwenden, wie wir in Abschnitt 4 sehen werden.

4. Experimentelle Ergebnisse und Analyse

4.1. 500 MB PageRank-Experimente

4.1.1. Ergebnisse beim Ändern der JVM-Heap-Konfigurationen

Abbildung 3 zeigt die experimentellen Ergebnisse jeder Phase der PageRank-Arbeitslast durch Ändern der JVM-Heap-Größen. In der Distinct-Phase liest Spark die Eingabedaten und unterscheidet die URL und Links. Wie wir aus den Ergebnissen der Phase „Distinct0“ ersehen können, verringert sich die Gesamtausführungszeit hauptsächlich aufgrund der Änderung der JVM-Heap-Größen von den Optionen _1 und _2 auf _3 zur Garbage Collection (GC). Beispielsweise beträgt die GC-Zeit 25 s, 24 s und 16 s in M&S_1, M&S_2 und M&S{{10}}. Daher können wir in der Distinct0-Phase die Gesamtleistung verbessern, indem wir die GC-Zeit verkürzen, wenn wir den Speicherplatz erhöhen. Andererseits erhöht sich in der Phase „Distinct1“ die Gesamtausführungszeit, wenn wir die Optionen von _1 und _2 in _3 ändern. Dies ist hauptsächlich auf den Shuffle-Spill zurückzuführen. Als wir die Spark-Web-Benutzeroberfläche überprüften, wurden die Shuffle-Daten aufgrund des fehlenden Shuffle-Speicherplatzes auf die Festplatte übertragen. Beispielsweise betragen die Größen der Shuffle-Spill-Daten auf der Festplatte in M&S_1, M&S_2 und M&S_3 jeweils 0, 220 MB und 376 MB. Wenn der Shuffle-Spill auftritt, erhöht sich der CPU-Overhead für das Übertragen der Daten auf die Festplatte, da die Daten serialisiert werden müssen.

memory enhancement

Nach den Distinct-Stufen gibt es iterative FlatMap-Stufen, um Ränge zu erhalten. FlatMap-Stufen erzeugen viele Shuffle-Daten, was dazu führen kann, dass unserem Cluster der erforderliche Shuffle-Speicherplatz fehlt. Wenn daher die verfügbare Menge an Shuffle-Speicherplatz abnimmt (in der Reihenfolge der Optionen _1, _2 und _3), kann es zu mehr Shuffle-Spill kommen, was sich möglicherweise auf die Gesamtausführung des Jobs auswirken kann Zeit (z. B. M&S-Option flatMap2 Stufe _1: 37 s, _2: 40 s, _3: 49 s). Wenn die Daten jedoch nur im Speicher zwischengespeichert werden (z. B. M_1, M_2 und M_3), zeigen sie ein anderes Muster. Der Hauptgrund für dieses Verhalten liegt darin, dass der Spark-Planer die Aufgaben ungleichmäßig plant, da nicht genügend Speicherplatz zum Zwischenspeichern des RDD für die Optionen _1 und _2 vorhanden ist. Wenn ein Arbeiter keine RDDs hat, wird er aus dem Planungspool ausgeschlossen. Daher müssen die anderen Worker zusätzliche Aufgaben mit GC-Overhead erledigen, was sich auf die gesamte Ausführungszeit des Jobs auswirken kann.

4.1.2. Ergebnisse mit geänderten RDD-Caching-Optionen

Erstens sind Distinct-Stufen nicht von der Änderung der RDD-Caching-Richtlinie betroffen, sondern nur von der Speichernutzung. Die von der RDD-Caching-Option betroffenen Stufen sind FlatMap-Stufen, da während der Shuffle-Phase zwischengespeicherte RDDs erneut verwendet werden.

improve working memory

In Abbildung 4 wird das Diagramm durch die Option N_1 normalisiert, die die RDD- und _1-Speicherkonfiguration nicht zwischenspeichert, um den Leistungsunterschied zu überprüfen. Wenn man nur die Diagramme von _1 in der Reihenfolge M_1, M&S_1 und S_1 vergleicht, kommt es zu einer Leistungsverschlechterung von 32 % in M{{8 }} und 30 % bzw. 20 % Leistungsverbesserungen mit M&S_1 und S_1. Bei der M_1-Option liegt der Grund für die relativ schlechte Leistung darin, dass RDDs aufgrund des Speichermangels ungleichmäßig zwischengespeichert werden, was, wie bereits erwähnt, zu einer ungleichmäßigen Planung führt. Dies bedeutet, dass der JVM-Heap-Speicherplatz nicht ausreicht, um die Daten zu mischen und die RDDs zu speichern.

increase brain power

Um dieses Problem zu lösen, verteilen wir die RDDs auf den Cache sowohl im Speicher als auch auf der SSD, was die Leistung verbessern kann, wie mit der Option M&S_1 gezeigt. Das Zwischenspeichern des RDD im Speicher verbessert die Zugriffsgeschwindigkeit für das RDD, und das Zwischenspeichern des RDD auf der SSD kann den Shuffle-Spill vermeiden, indem der verfügbare Shuffle-Speicherplatz im Speicher effektiv erweitert wird. Mit der Option S_1, die eine Leistungsverbesserung von 20 % zeigte, wird das RDD nur auf der SSD zwischengespeichert. Der Shuffle-Spill wird durch das Zwischenspeichern des RDD auf der SSD reduziert. Es wurde jedoch eine geringere Leistungsverbesserung erzielt als bei M&S_1, bei dem das RDD hauptsächlich im Speicher zwischengespeichert und aus dem Speicher wiederverwendet wird.

In der Standardkonfiguration von Spark, der Option _3, können wir dies in der Reihenfolge M_3, M&S_3, S_3 und N{{4) sehen }} nimmt die Gesamtleistung ab. In der Standardkonfiguration reicht der Speicher des JVM-Heaps aus, um das RDD ausgeglichen zwischenzuspeichern. Daher hängt die Gesamtleistung hauptsächlich von der Leistung des verwendeten Speichergeräts ab. Allerdings können wir mit der Option M&S_1 immer noch die beste Leistung erzielen, da wir die GC-Zeit und den Shuffle-Spill effektiv reduzieren können, indem wir das RDD sowohl im Speicher als auch auf der SSD zwischenspeichern.

4.2. 1 GB PageRank-Leistung

Wir haben mit der PageRank-Arbeitslast experimentiert, indem wir die Datengröße von 500 MB auf 1 GB erhöht haben. Abbildung 5 zeigt das unterschiedliche Verhalten des Systems im Vergleich zum PageRank für den 500-MB-Datensatz. Wir können einige fehlgeschlagene Jobs sehen, die den Job erst in der take6-Phase abschließen konnten (z. B. N_1, N_2, M_1, M_2, M _3, M&S_3). Unter diesen fehlgeschlagenen Jobs gibt es solche, die in der flatMap2-Phase fehlgeschlagen sind, nämlich N_1, N_2 und M_1. Der Grund für das Scheitern des Auftrags ist der Mangel an Speicher. Der GC tritt auf, wenn das RDD nicht ausreichend im Speicher zwischengespeichert ist. Aufgrund dieses GC-Overheads erhält der Spark-Executor eine ExecutorLostFailure-Ausnahme.

M_2, M_3 und M&S_3 könnten mit der Verarbeitung bis zur flatMap2-Stufe fortfahren; Danach tritt jedoch ein Fehler auf. M&S_3 funktioniert bis zur flatMap2-Stufe ähnlich wie M_3, da bei Verwendung der M&S_3-Option ausreichend Speicher zum Zwischenspeichern des RDD vorhanden ist. Nach der flatMap2 tritt der OutOfMemory-Fehler aufgrund des Mangels an Shuffle-Speicherplatz in der flatMap3-Stufe auf.

4.2.1. Ergebnisse bei Änderung der JVM-Heap-Konfiguration

Die Stufe „Distinct0“ zeigt sehr ähnliche Ergebnisse wie der 500-MB-Datensatz, und die Gesamtleistung verbessert sich in der Reihenfolge der Optionen _1, _2 und _3. Dies liegt daran, dass die GC-Zeit auf 78 s, 59 s bzw. 28 s reduziert wird

Andererseits wurden in der Distinct1-Phase unterschiedliche Ergebnisse für den 500-MB-Datensatz angezeigt. Im 500-MB-Datensatzexperiment können wir den Leistungsgewinn durch die Vergrößerung des Shuffle-Speicherplatzes erkennen. Im 1-GB-Datensatzexperiment kann der Executor-Speicher des Worker-Knotens jedoch nicht die große Datenmenge aufnehmen. Daher wird der Shuffle-Speicherplatz relativ unzureichend. Beispielsweise betragen die Shuffle-Spill-Mengen für die Optionen _1, _2 und _3 575,5 MB, 813,8 MB bzw. 843,4 MB, und die GC-Zeit beträgt 33 s, 10 s bzw. 8 s. Wie bereits erwähnt, muss das RDD bei einem Shuffle-Spill serialisiert werden, damit die CPU-Berechnungen zunehmen können, was zu einer Verschlechterung der Gesamtleistung führen kann.

increase memory power

4.2.2. Ergebnisse der Änderung der RDD-Caching-Richtlinie

Für die Analyse der Ausführungszeit durch Ändern der RDD-Caching-Richtlinie schließen wir, wie wir in Abbildung 6 sehen können, bestimmte Phasen aus Abbildung 5 aus. Dies liegt daran, dass wir keine einzelnen Phasen analysieren müssen, da durch die Änderung der RDD-Caching-Richtlinie keine Änderungen verursacht werden .

Interessanterweise gibt es bei verschiedenen JVM-Heap-Konfigurationen in flatMap-Stufen keine Änderungen im Gegensatz zum 500-MB-Datensatz. Der Grund dafür ist, dass der Shuffle-Spill in allen Konfigurationen auftritt, weil nicht genügend Speicher vorhanden ist. Die Gesamtausführungszeit durch Ändern der RDD-Caching-Option erhöht sich in der Reihenfolge M&S, S, N und M. (M&S ist die schnellste Option.) Bei Option N tritt der ExecutorLostFailure-Fehler auf, weil nicht genügend Speicherplatz vorhanden ist. Wenn in Option M das RDD im Speicher zwischengespeichert wird, entsteht GC-Overhead, da nicht genügend Speicherplatz vorhanden ist. Selbst wenn das RDD im Arbeitsspeicher zwischengespeichert ist, schlägt der Job aufgrund des ExecutorLostFailure-Fehlers fehl, der auftritt, wenn der Shuffle-Speicherplatz nicht ausreicht (OutOfMemory).

In Situationen mit solch geringem verfügbaren Speicher können M&S- und S-Optionen effektive Alternativen sein. In der M&S{{0}}-Option erhöhen wir die Zugänglichkeit des RDD, indem wir das RDD sowohl im Speicher als auch auf der SSD zwischenspeichern. Infolgedessen kommt es aus demselben Grund zu einer Leistungsverbesserung wie beim 500 MB großen Datensatz. Darüber hinaus ist durch das Caching des RDD auf der SSD ausreichend Shuffle-Speicherplatz vorhanden. Wie in Abbildung 6 zu sehen ist, wird die M&S_1-Option in diesem Experiment zur schnellsten Option (M&S_1:0,6, S_1:0,63, T_1 0,64).

improve short term memory

4.3. TC-Experimentanalyse

Abbildung 7 zeigt die Ergebnisse von TC-Experimenten (transitive Schließung), die die Eingabedaten mit 50 000 Kanten und 25 000 Scheitelpunkten verwenden, die zufällig generiert wurden. Die Iterationszahl beträgt 10. Durch die Iterationen wird die Anzahl der Aufgaben bei jeder Iteration verdoppelt, und daher erhöht sich die Größe des RDD und auch die Anzahl der Shuffle-Lese- und -Schreibvorgänge nimmt zu. In der letzten Iteration beträgt die Anzahl der Aufgaben 4096. Je mehr Iterationsstufen vorhanden sind, desto größer ist die Auswirkung auf die Gesamtausführungszeit des Jobs. Die letzte Iterationsstufe ist die größte und besteht aus vielen Aufgaben, die die Gesamtleistung beeinträchtigen können .

increase memory

Wie wir in Abbildung 7 sehen können, verbessert sich die Leistung in der Reihenfolge _3, _2 und _1 bei den Optionen M, M&S und S, was bedeutet, dass eine ausreichende Neuordnung erzielt wird Der Speicher des JVM-Heaps ist hilfreich. Bei der M-Option ist die Leistung der Option _1 18 % schneller als die der Option _3, während bei der M&S-Option die Leistung der Option _1 3 % schneller ist als die der Option {{9 }}. In der S-Option ist die Leistung von _1 2 % schneller als _3.

Wenn wir uns auf die Änderung der RDD-Caching-Option konzentrieren, ist die Leistung der Option S_1 42 % schneller als die von N_1 und auch 31 % schneller als die von M_1. Der Grund für die Leistungssteigerung der Jobausführungszeit hängt von der letzten Iterationsstufe ab. Der Schlüsselfaktor, der die letzte Iterationsstufe beeinflusst, ist die Blockzeit des Shuffle-Lesevorgangs. Die Zeit der Shuffle-Leseblockierung tritt auf, wenn das in der vorherigen Phase ausgeführte RDD aufgrund des Mangels an Executor-Speicher von einem anderen Worker-Knoten über das Netzwerk gelesen wird.

Selbst wenn jede Aufgabe einen Leistungsgewinn von etwa 1–2 s durch das Lösen der Shuffle-Lese-Blockierzeit hat, können wir einen erheblichen Leistungsgewinn erzielen, da im letzten Zustand die Anzahl der Aufgaben recht groß ist (d. h. 4096). Darüber hinaus ist einer der Hauptfaktoren, die die Jobausführungszeit beeinflussen, die Zählphase, die zählt, wie viele Kanten die TC-Matrix beim letzten Job hat.

Da in der Zählphase keine RDDs zwischengespeichert sind, liest Spark bei Option N die in der vorherigen Phase ausgeführten Shuffle-Daten, was 60 s dauert. Darüber hinaus wird bei Option M das RDD aufgrund des Mangels an Executor-Speicher nicht im Speicher zwischengespeichert. Dadurch dauert es auch 60 s. Bei den M&S- und S-Optionen kann das RDD jedoch im Speicher und auf der SSD zwischengespeichert werden, sodass die Zählphase nur 2 s dauert.

4.4. TeraSort-Experimentanalyse

Abbildung 8 zeigt die experimentellen Ergebnisse des TeraSort-Benchmarks, der einen 10-GB-Datensatz verwendet, indem die JVM-Heap-Konfiguration und die RDD-Caching-Option geändert werden. Dieser Graph wird durch die Option N_1 normalisiert. Wir können sehen, dass alle Auftragsausführungszeiten ähnlich sind; der Unterschied zwischen ihnen beträgt weniger als 5 %. Beim TeraSort-Workload kam es durch die Änderung der Konfigurationen und Optionen zu keinen Leistungsverbesserungen oder -einbußen. In der Sortierphase erfolgt ein paar Durchgänge durch das Netzwerk. Allerdings betragen die Größen von Shuffle Read und Shuffle Write jeweils 25 MB, was im Vergleich zu PageRank und TC recht klein ist. Daher haben die JVM-Heap-Konfiguration und die RDD-Caching-Option keinen Einfluss auf die Leistung. Darüber hinaus besteht die TeraSort-Arbeitslast nicht aus iterativen Jobs wie beim transitiven Abschluss, sodass das RDD-Caching in der vorherigen Phase keinen Nutzen bringt.

ways to improve brain function

4.5. K-Means-Clustering-Experimentanalyse

Die normalisierte Auftragsabschlusszeit des k-means-Clusterings für den 1,5-GB-Datensatz ist in Abbildung 9 dargestellt. Der Zweck des k-means-Clusterings besteht darin, die k Cluster im Datensatz basierend auf der Distanzmessung (z. B. euklidische Distanz) zu finden. Bei dieser Arbeitslast reduziert der Algorithmus die SSE (Summe der quadratischen Fehler) [24], indem er die Abstandsberechnung zwischen den k Mittelpunkten und jedem Datenpunkt iteriert. In diesem Experiment wiederholen wir diesen Prozess acht Mal. Die zu mischende Datenmenge ist minimal, da die benötigten Daten aus der vorherigen Stufe die Informationen über die Mittelpunkte und SSE in jeder Stufe sind. In unserer K-Means-Clustering-Arbeitslast beträgt die maximale Menge an Shuffle-Lese-/Schreibdaten 1,0 MB und die minimale Menge 0,8 MB. Der Shuffle-Spill tritt hier nicht auf, da der Shuffle-Speicherplatz in allen Einstellungen ausreichend ist. In den Experimenten ohne Caching-Optionen gibt es keinen Unterschied zwischen den Optionen _1, _2 und _3, da diese Einstellungen kein RDD zwischenspeichern und in allen drei Einstellungen das Shuffle Platz ist ausreichend.

improve your memory

Beim Zwischenspeichern der RDDs im Hauptspeicher oder im Hauptspeicher und auf der SSD gilt: Je mehr Speicherplatz für das RDD vorhanden ist, desto mehr verbessert sich die Leistung in der Auftragsausführungszeit, da mehr RDDs auf dem Speicherplatz zwischengespeichert werden können. Beim Vergleich der Option „Nur Speicher“{0}}und der Option „Speicher_und_SSD zeigte die Option „Speicher_und_SSD eine bessere Leistungsverbesserung. Dies liegt daran, dass bei der Option „nur Speicher_“ der Speicherplatz selbst bei der Option „M_3“ nicht ausreicht. Darüber hinaus wird durch das Zwischenspeichern der RDDs auf der SSD ein solcher Speichermangel behoben. Die Optionen Speicher_und_SSD verbesserten die Leistung im Durchschnitt um 10 % im Vergleich zur Option nur Speicher_.

Beachten Sie, dass die K-Means-Clustering-Arbeitslast aufgrund des Unterschieds in der Menge der Shuffle-Daten eine entgegengesetzte Leistungstendenz zu PageRank- und transitiven Schließungs-Arbeitslasten aufweist. Darauf gehen wir im folgenden Unterabschnitt näher ein.

5. Diskussion und Zusammenfassung

5.1. Diskussion

Wir haben die Hauptfaktoren potenzieller Leistungseinbußen anhand der Merkmale der Arbeitslast und der Verarbeitungsphasen analysiert. Unsere umfangreichen experimentellen Ergebnisse bezüglich der Anwendung der Leistungsoptimierungstechniken der Spark-Plattform für verschiedene Arbeitslasten werden wie folgt zusammengefasst:

• Die Leistungseinbuße durch die Java-Garbage-Collection: Bei der PageRank-Arbeitslast mit dem 500-MB-Datensatz und dem 1-GB-Datensatz tritt der GC auf, wenn im JVM-Heap nicht genügend Speicherplatz zum Speichern des RDD vorhanden ist. In der Distinct0-Phase, in der die Eingabedatei aus dem HDFS gelesen und im RDD zwischengespeichert wird, erfolgt die GC. Wir erweitern den Speicherplatz des JVM-Heaps durch die Konfiguration, um dieses GC-Problem zu lösen. Wir können die Leistung verbessern, um GC zu reduzieren, da der Speicherplatz des JVM-Heaps erweitert werden kann. In den Abbildungen 3 und 5 zeigt die _3-Konfiguration mit derselben RDD-Caching-Option die beste Leistung in der Distinct0-Stufe. Darüber hinaus schlagen im PageRank mit dem 1-GB-Datensatz einige Optionen in der FlatMap-Phase aufgrund des Speichermangels fehl. Der GC-Overhead erhöht sich so stark, dass die Stufe ausfällt oder in eine Endlosschleife gerät. Daher bauen wir den Cluster mit SSDs auf, um dieses Problem zu lösen. Es zeigt eine Leistungsverbesserung und führt den Job, der fehlgeschlagen ist, nur mit Speicher erfolgreich aus, wie in Abbildung 6, M&S_1 und S_1 dargestellt.

• Der Leistungsabfall durch Shuffle-Spill: In der PageRank-Arbeitslast mit dem 500-MB-Datensatz und dem 1-GB-Dataset können wir in der FlatMap-Stufe sehen, dass die Option M&S_1 die beste Leistung zeigt, da sie den geringsten Shuffle-Anteil aufweist Spill (Abbildung 4: M&S_1 ist 30 % schneller als N_1; Abbildung 6: M&S_1 ist 40 % schneller als N_3). PageRank hat viele Shuffle-Aufgaben. Wenn also der Shuffle-Speicherplatz des JVM-Heaps nicht ausreicht, um die Daten durch das Netzwerk zu mischen, kommt es zum Shuffle-Spill. Um den Shuffle-Spill zu reduzieren, wird daher die Erweiterung des Shuffle-Speicherplatzes des JVM-Heaps zum Schlüsselfaktor für die Leistungsverbesserung.

Darüber hinaus können wir die Leistung verbessern, indem wir das RDD sowohl im Speicher als auch auf der SSD speichern. Dadurch kann der Executor den Shuffle-Speicher des JVM-Heaps erweitern, um Shuffle-Spill zu reduzieren. Wenn es mehr Iterationen gibt, wäre die Leistung ab der FlatMap-Stufe der entscheidende Punkt für die Leistungsverbesserung. Im 1-GB-Dataset-Experiment ist die Jobausführungszeit von S_3 die beste Option, da RDDs nur auf der SSD zwischengespeichert werden und auf den Executoren ausreichend Heap-Speicher vorhanden ist. Somit sind in der Option S_3 die Distinct-Stufen schneller als bei jeder anderen Option. Wenn jedoch die Iterationszahl zunimmt, wirkt sich die flatMap-Stufe auf die Ausführungszeit des Jobs aus. Daher kann die Option M&S_1 in diesem Fall eine hervorragende Leistung erzielen. Durch diese Analysen können wir feststellen, dass das Mischen einen entscheidenden Einfluss auf die Fertigstellungszeit eines Auftrags hat. Daher müssen wir den Shuffle-Speicher des JVM-Heaps erweitern und das RDD sowohl im Speicher als auch auf der SSD zwischenspeichern, um genügend Shuffle-Speicherplatz zu erhalten, um ein Shuffle-Verschütten zu verhindern.

• Die Leistungseinbußen durch die Zeit der Shuffle-Read-Blockierung: Es gibt eine Shuffle-Read-Blockierungszeit auf dem TC-Workload. Es tritt auf, wenn in der Phase viele Aufgaben vorhanden sind und jede Aufgabe das vorherige RDD über das Netzwerk lesen muss. Als Ergebnis des TC-Experiments (Abbildung 7) ist die M&S-Option schneller als Option M. Bei derselben RDD-Caching-Option ist die Erweiterung des Shuffle-Speicherplatzes des JVM-Heaps schneller als die Erweiterung des Speicherplatzes. Der Grund für die verbesserte Leistung liegt darin, dass durch die Erweiterung des Shuffle-Speicherplatzes des JVM-Heaps die Blockzeit für Shuffle-Lesevorgänge bei jeder Aufgabe abnimmt.

5.2. Zusammenfassung: Welches ist der beste Weg?

In den umfassenden experimentellen Ergebnissen gibt es kein einziges optimales Setup zur Steigerung aller Workloads, da jede dieser Workloads auch während ihrer Joblebensdauer unterschiedliche Eigenschaften aufweist. Wir können jedoch dennoch vorschlagen, wie die Konfigurationen einer verteilten In-Memory-Computing-Plattform optimiert werden können, indem wir die Vielfalt der Ziel-Workloads wie folgt berücksichtigen:

• Spark-JVM-Heap-Konfiguration – Shuffle-Bereich vs. Speicherbereich: Den experimentellen Ergebnissen von vier verschiedenen Workloads zufolge können wir Leistungsunterschiede je nach Workload-Merkmale beobachten. Beispielsweise ist PageRank ein typisches Beispiel dafür, dass eine große Menge an Shuffle-Daten vorhanden ist. Daher verbessert die Zuweisung von mehr Speicher für den Shuffle-Teil die Gesamtleistung. Beim K-Means-Clustering gilt jedoch: Je mehr Speicher wir im Gegensatz zum Shuffle-Speicher zuweisen, desto weniger Ausführungszeit ist erforderlich. Wenn wir daher den JVM-Speicherzuteilungsprozentsatz dynamisch entsprechend den Arbeitslastmerkmalen anpassen können, können wir die Gesamtausführungszeit optimieren. Das Hadoop YARN [25] ermöglicht es uns, Jobs verschiedenen Arten von Clustern (Konfigurationen) zuzuweisen, sodass wir diese Idee auf einen großen Hadoop-Cluster anwenden können, um Speichereigenschaften für verschiedene Arten von Jobs zu erfüllen.

• RDD-Caching-Richtlinie – Speicher vs. SSD: In den meisten Fällen zeigt das SSD-gestützte Speicher-Caching die beste Leistung, es sei denn, alle RDDs passen in den tatsächlichen Hauptspeicher. Daher kann die SSD-unterstützte Speicher-Caching-Richtlinie eine sinnvolle Wahl für anspruchsvolle Arbeitslasten sein, die erhebliche Mengen an Hauptspeicher erfordern, die von keinem einzelnen Knoten in einem Cluster abgedeckt werden können.

6. Schlussfolgerungen

In diesem Artikel haben wir die Hauptfaktoren für den Leistungsabfall des Spark-Systems untersucht, das auf einem Commodity-Server-basierten Computing-Cluster mit unzureichend verfügbaren Hauptspeichern läuft. Nach Experimenten und Analysen stellten wir Alternativen vor, die die Gesamtleistung verbessern können.

Die Java-Garbage-Collection erfolgt, wenn der Speicherplatz des JVM-Heaps aufgrund eines Mangels an physischem Speicher nicht ausreicht. Java GC lässt Aufgaben auf die Garbage Collection warten, sodass sich die Gesamtzeit für die Auftragserledigung erhöht. Der Shuffle-Spill tritt auf, wenn der Shuffle-Speicherplatz des JVM-Heaps während der Shuffle-Phase nicht ausreicht. Shuffle Spill erhöht den CPU-Overhead für die Serialisierung, um Zwischen-Shuffle-Daten aufgrund des fehlenden Shuffle-Speicherplatzes auf die Festplatte zu übertragen. Im TC-Workload-Experiment sorgt die Zeit für die Shuffle-Leseblockierung dafür, dass die Aufgabe aufgrund des Mangels an Shuffle-Speicherplatz auf das Lesen von Shuffle-Daten über das Netzwerk wartet. Alle diese Faktoren können möglicherweise die Gesamtzeit für die Auftragserledigung verlängern, was die Leistung des Spark-Systems ernsthaft beeinträchtigen kann.

Um diese Probleme anzugehen, erstellen wir einen Cluster mit einer SSD und zwischenspeichern das RDD sowohl im Speicher als auch auf der SSD separat, indem wir die SSD nutzen, um den Speicherplatz des Arbeitsspeichers zu ergänzen. Darüber hinaus passen wir die JVM-Heap-Konfiguration an, um den Shuffle-Speicherplatz zu erweitern. Dadurch konnten wir eine Leistungsverbesserung von 30 % für den PageRank-Workload und eine Leistungsverbesserung von 42 % für den TC-Workload erreichen. Wir haben festgestellt, dass der Shuffle-Spill ein Schlüsselfaktor für Leistungseinbußen sein kann, und haben durch Experimente gezeigt, dass bei Workloads, die aus mehreren Iterationen und Shuffling bestehen, die Erweiterung des Shuffle-Speicherplatzes zu erheblichen Leistungssteigerungen führen kann. Darüber hinaus haben wir festgestellt, dass unterschiedliche Speichernutzungsmuster von Jobs die Gesamtausführungszeit abhängig von der prozentualen Speicher-/Shuffle-Speicherzuweisung in der JVM beeinflussen können. Laut der Leistungsanalyse von PageRank und K-Means-Clustering kann eine Speicherzuweisung in der JVM, die gut auf die Workload-Merkmale abgestimmt ist, die Auftragsabschlusszeit erheblich verkürzen.

Die Integration dieser Erkenntnisse in die Spark-Plattform wäre eine unserer zukünftigen Arbeiten. Wenn Workloads beispielsweise anhand der Mengen an Shuffle-Daten charakterisiert werden können, kann automatisch eine optimierte Konfiguration angewendet werden, um die Verarbeitung von Ziel-Workloads zu beschleunigen. Daher kann in heterogenen Serverkonfigurationen die Entwicklung eines arbeitsspeichernutzungsbewussten Planungssystems die Gesamtleistung eines Spark-basierten Clusters verbessern.

Autorenbeiträge:

Konzeptualisierung, JL (Jaehwan Lee); Methodik, JL (Jaehwan Lee) und JC; Software, JC und JL (Jaehyun Lee); Validierung, JC, JL (Jaehyun Lee) und JL (Jaehwan Lee); Untersuchung, JL (Jaehwan Lee) und J.-SK; Ressourcen, JL (Jaehwan Lee) und J.-SK; Datenkuration, JC und JL (Jaehyun Lee); Schreiben – Originalentwurfsvorbereitung, JC und JL (Jaehyun Lee); Schreiben – Rezension und Bearbeitung, JL (Jaehwan Lee) und J.-SK; Visualisierung, JL (Jaehyun Lee); Aufsicht, JL (Jaehwan Lee) und J.-SK; Projektverwaltung, JL (Jaehwan Lee) und J.-SK; Finanzierungsakquise, JL (Jaehwan Lee). Alle Autoren haben die veröffentlichte Version des Manuskripts gelesen und ihr zugestimmt.

help with memory

Finanzierung:

Diese Forschung wurde durch das Basic Science Research Program (NRF-2020R1F1A1072696) durch die National Research Foundation of Korea (NRF) unterstützt, finanziert vom Ministerium für Wissenschaft und IKT, GRRC-Programm der Provinz Gyeonggi (Nr. GRRC-KAU{ {5}}B01, „Studie zur Video- und Raumkonvergenzplattform für 360VR-Dienste“) und ITRC-Unterstützungsprogramm (Information Technology Research Center) (IITP-2021-2018-0-01423).

Erklärung des Institutional Review Board:

Unzutreffend.

Einverständniserklärung:

Unzutreffend.

Erklärung zur Datenverfügbarkeit:

Auf Anfrage erhältlich.

Interessenskonflikte:

Die Autoren geben an, dass kein Interessenkonflikt besteht.


Verweise

1. Dean, J.; Ghemawat, S. MapReduce: Vereinfachte Datenverarbeitung auf großen Clustern. Komm. ACM 2008, 51, 107–113. [CrossRef]

2. Das Apache Hadoop-Projekt: Open-Source-Software für zuverlässiges, skalierbares, verteiltes Computing. Online verfügbar: https://hadoop.apache.org/ (abgerufen am 10. September 2021).

3. Shvachko, K.; Kuang, H.; Radia, S.; Chansler, R. Das verteilte Hadoop-Dateisystem. In Proceedings of the 2010 IEEE 26th Symposium on Mass Storage Systems and Technologies (MSST), Incline Village, NV, USA, 3.–7. Mai 2010; S. 1–10.

4. Zaharia, M.; Chowdhury, M.; Franklin, MJ; Shenker, S.; Stoica, I. Spark: Cluster-Computing mit Arbeitsmengen. HotCloud 2010, 10, 95.

5. Ousterhout, K.; Rasti, R.; Ratnasamy, S.; Shenker, S.; Chun, BG Die Leistung in Datenanalyse-Frameworks verstehen. In Proceedings of the 12th USENIX Symposium on Networked Systems Design and Implementation (NSDI), Oakland, CA, USA, 4.–6. Mai 2015; S. 293–307.

6. Xing, W.; Ghorbani, A. Gewichteter PageRank-Algorithmus. In Proceedings of the IEEE Second Annual Conference on Communication Networks and Services Research, Fredericton, NB, Kanada, 21. Mai 2004; S. 305–314.

7. Chakradhar, ST; Agrawal, VD; Rothweiler, SG Ein transitiver Abschlussalgorithmus zur Testgenerierung. IEEE Trans. Computergestützte Des. Integr. Schaltungen Syst. 1993, 12, 1015–1028. [CrossRef]

8. O'Malley, O. Terabyte Sort auf Apache Hadoop. Yahoo. Mai 2008. S. 1–3. Online verfügbar: http://sortbenchmark.org/ YahooHadoop.pdf (abgerufen am 10. September 2021).

9. K-Means-Clustering. Online verfügbar: https://en.wikipedia.org/wiki/K-means_clustering (abgerufen am 10. September 2021).

10. Zaharia, M.; Chowdhury, M.; Das, T.; Dave, A.; Ma, J.; McCauly, M.; Franklin, MJ; Shenker, S.; Stoica, I. Resiliente verteilte Datensätze: Eine fehlertolerante Abstraktion für In-Memory-Cluster-Computing. In Proceedings of the 9th USENIX Symposium on Networked Systems Design and Implementation (NSDI), San Jose, CA, USA, 25.–27. April 2012; S. 15–28.

11. Davidson, A.; Oder A. Optimierung der Shuffle-Leistung in Spark; Technischer Bericht; Berkeley-Fakultät für Elektrotechnik und Informatik, University of California: Berkeley, CA, USA, 2013.

12. Nicolae, B.; Costa, CHA; Misale, C.; Katrinis, K.; Park, Y. Nutzung adaptiver I/O zur Optimierung kollektiver Datenmischmuster für Big-Data-Analysen. IEEE Trans. Parallelverteiler Syst. 2017, 28, 1663–1674. [CrossRef]

13. Zhang, H.; Cho, B.; Seyfe, E.; Ching, A.; Freedman, MJ Riffle: Optimierter Shuffle-Service für groß angelegte Datenanalysen. In Proceedings of the Thirteenth EuroSys Conference; EuroSys '18; Association for Computing Machinery: New York, NY, USA, 2018. [CrossRef]


For more information:1950477648nn@gmail.com




Das könnte dir auch gefallen