5 Spark-Optimierungstechniken, die jeder Data Scientist kennen sollte
Veröffentlicht: 2020-06-12Ob kleines Startup oder großer Konzern, Daten sind überall. Diese Daten werden aus einer Vielzahl von Quellen gesammelt, wie z. B. Kundenprotokollen, Bürorechnungen, Kostenblättern und Mitarbeiterdatenbanken. Unternehmen sammeln und analysieren diese Datenblöcke, um Muster und Trends zu ermitteln. Diese Muster helfen ihnen, wichtige Entscheidungen zur Verbesserung des Geschäfts zu treffen.
Diese Datenanalyse und Zahlenverarbeitung sind jedoch nicht nur über Excel-Tabellen möglich. Hier kommen Datenverarbeitungs-Softwaretechnologien ins Spiel. Eines der schnellsten und am weitesten verbreiteten Datenverarbeitungs-Frameworks ist Apache Spark. Spark-Optimierungstechniken werden verwendet, um die Leistung zu optimieren, um das Beste daraus zu machen.
Wir werden gleich etwas über die Techniken lernen. Lassen Sie uns einen Blick auf die Grundlagen dieses Software-Frameworks werfen.
Inhaltsverzeichnis
Was ist Apache Spark?
Apache Spark ist ein weltbekanntes Open-Source-Cluster-Computing-Framework , das zur Verarbeitung riesiger Datenmengen in Unternehmen verwendet wird. Die Verarbeitung dieser riesigen Datenmengen und deren Verteilung auf mehrere Systeme ist mit Apache Spark einfach. Es bietet einfache APIs, die Programmierern und Entwicklern das Leben erleichtern.
Spark bietet native Bindungen für Programmiersprachen wie Python, R, Scala und Java. Es unterstützt maschinelles Lernen, Graphverarbeitung und SQL-Datenbanken . Aufgrund dieser erstaunlichen Vorteile wird Spark in Banken, Technologieunternehmen, Finanzorganisationen, Telekommunikationsabteilungen und Regierungsbehörden eingesetzt. Um mehr über Apache Spark zu erfahren, besuchen Sie unsere Data-Science-Kurse von anerkannten Universitäten.
Architektur von Apache Spark
Die Laufzeitarchitektur von Apache Spark besteht aus den folgenden Komponenten:
Spark-Treiber oder Master-Prozess
Dies wandelt Programme in Tasks um und plant sie dann für Ausführende (Slave-Prozesse). Der Aufgabenplaner verteilt diese Aufgaben an Ausführende.
Cluster-Manager
Der Spark-Cluster-Manager ist für das Starten von Executoren und Treibern verantwortlich. Es plant und weist Ressourcen über mehrere Hostmaschinen für einen Cluster zu.
Vollstrecker
Executors, auch Slave-Prozesse genannt, sind Entitäten, in denen Aufgaben eines Jobs ausgeführt werden. Nach dem Start werden sie ausgeführt, bis der Lebenszyklus der Spark-Anwendung endet. Die Ausführung eines Spark-Jobs wird nicht angehalten, wenn ein Executor fehlschlägt.
Belastbare verteilte Datensätze (RDD)
Dies ist eine Sammlung unveränderlicher Datensätze, die über die Knoten eines Spark-Clusters verteilt sind. Insbesondere ist ein Cluster eine Sammlung von verteilten Systemen, auf denen Spark installiert werden kann. RDDs sind in mehrere Partitionen unterteilt. Und sie werden als belastbar bezeichnet, da sie die Datenprobleme im Falle eines Datenausfalls beheben können.
Die von Spark unterstützten RDD-Typen sind:
- Hadoop-Datensätze, die aus Dateien im Hadoop Distributed File System erstellt wurden
- Parallelisierte Sammlungen, die auf Scala-Sammlungen basieren können
DAG (gerichteter azyklischer Graph)
Spark erstellt ein Diagramm, sobald ein Code in die Spark-Konsole eingegeben wird. Wenn eine Aktion (eine Anweisung zum Ausführen einer Operation) ausgelöst wird, wird dieser Graph an den DAGScheduler übermittelt .
Dieser Graph kann als Folge von Datenaktionen betrachtet werden. DAG besteht aus Knoten und Kanten. Knoten stellen ein RDD dar und Kanten stellen Berechnungen dar, die an diesem spezifischen RDD durchgeführt werden sollen. Es wird ein gerichteter Graph genannt, da es innerhalb des Graphen keine Schleifen oder Zyklen gibt.
Spark-Optimierungstechniken
Spark-Optimierungstechniken werden verwendet, um die Einstellungen und Eigenschaften von Spark zu ändern, um sicherzustellen, dass die Ressourcen richtig genutzt und die Jobs schnell ausgeführt werden. All dies hilft letztendlich dabei, Daten effizient zu verarbeiten.
Die beliebtesten Spark-Optimierungstechniken sind unten aufgeführt:
1. Datenserialisierung
Hier wird ein In-Memory-Objekt in ein anderes Format konvertiert, das in einer Datei gespeichert oder über ein Netzwerk gesendet werden kann. Dies verbessert die Leistung verteilter Anwendungen. Es gibt zwei Möglichkeiten, Daten zu serialisieren:
- Java Serialisierung – Das ObjectOutputStream- Framework wird zum Serialisieren von Objekten verwendet. Mit java.io.Externalizable kann die Leistung der Serialisierung gesteuert werden. Dieser Prozess bietet leichte Persistenz.
- Kyro-Serialisierung – Spark verwendet die Kryo-Serialisierungsbibliothek (v4) zum Serialisieren von Objekten, die schneller als die Java-Serialisierung ist und einen kompakteren Prozess darstellt. Um die Leistung zu verbessern, müssen die Klassen mit der Methode registerKryoClasses registriert werden.
2. Caching
Dies ist eine effiziente Technik, die verwendet wird, wenn die Daten häufiger benötigt werden. Cache() und persist() sind die Methoden, die bei dieser Technik verwendet werden. Diese Methoden werden zum Speichern der Berechnungen eines RDD, DataSet und DataFrame verwendet. Aber cache() speichert es im Speicher und persist() speichert es in der benutzerdefinierten Speicherebene.

Diese Verfahren können dabei helfen, Kosten zu reduzieren und Zeit zu sparen, da wiederholte Berechnungen verwendet werden.
Lesen Sie: Dataframe in Apache PySpark: Umfassendes Tutorial
3. Datenstrukturabstimmung
Wir können den Speicherverbrauch bei der Verwendung von Spark reduzieren, indem wir bestimmte Java-Funktionen optimieren, die den Overhead erhöhen könnten. Dies ist auf folgende Weise möglich:
- Verwenden Sie Aufzählungsobjekte oder numerische IDs anstelle von Zeichenfolgen für Schlüssel.
- Vermeiden Sie viele Objekte und komplizierte verschachtelte Strukturen.
- Setzen Sie das JVM-Flag auf xx:+UseCompressedOops, wenn die Speichergröße weniger als 32 GB beträgt.
4. Garbage-Collection-Optimierung
Zur Optimierung von Garbage Collectors müssen G1 und GC zum Ausführen von Spark-Anwendungen verwendet werden. Der G1 Collector verwaltet wachsende Haufen. GC-Tuning ist gemäß den generierten Protokollen unerlässlich, um das unerwartete Verhalten von Anwendungen zu kontrollieren. Aber vorher müssen Sie die Logik und den Code des Programms ändern und optimieren.
G1GC hilft, die Ausführungszeit der Jobs zu verkürzen, indem es die Pausenzeiten zwischen den Prozessen optimiert.
5. Speicherverwaltung
Der Speicher, der zum Speichern von Berechnungen wie Joins, Shuffles, Sortierungen und Aggregationen verwendet wird, wird als Ausführungsspeicher bezeichnet. Der Speicher wird zum Zwischenspeichern und Handhaben von in Clustern gespeicherten Daten verwendet. Beide Speicher verwenden einen einheitlichen Bereich M.
Wenn der Ausführungsspeicher nicht verwendet wird, kann der Speicher den Speicherplatz verwenden. In ähnlicher Weise kann der Ausführungsspeicher, wenn der Speicher im Leerlauf ist, den Platz nutzen. Dies ist eine der effizientesten Spark-Optimierungstechniken .
Lesen Sie auch: 6 bahnbrechende Funktionen von Apache Spark
Fazit
Aus den verschiedenen Spark-Optimierungstechniken können wir verstehen, wie sie dazu beitragen, die Verarbeitungszeit zu verkürzen und Daten schneller zu verarbeiten. Entwickler und Fachleute wenden diese Techniken je nach Anwendung und Datenmenge an.
Wenn Sie mehr über Spark-Optimierung und Data Science erfahren möchten, besuchen Sie das Executive PG Program in Data Science von IIIT-B & upGrad, das für Berufstätige entwickelt wurde und mehr als 10 Fallstudien und Projekte, praktische Workshops und Mentoring in der Industrie bietet Experten, 1-on-1 mit Mentoren aus der Branche, mehr als 400 Stunden Lern- und Jobunterstützung bei Top-Unternehmen.
Was sind Spark-Optimierungstechniken?
Apache Spark erleichtert Unternehmen die schnelle Verarbeitung von Daten und die einfache Lösung komplexer Datenprobleme. Es ist offensichtlich, dass es bei der Entwicklung eines Programms sehr wichtig ist, sich um seine Leistung zu kümmern. Spark-Optimierungstechniken helfen bei In-Memory-Datenberechnungen. Das einzige, was diese Berechnungen behindern kann, ist der Arbeitsspeicher, die CPU oder jede andere Ressource.
Jede Spark-Optimierungstechnik wird für einen anderen Zweck verwendet und führt bestimmte spezifische Aktionen aus. Einige der weit verbreiteten Funkenoptimierungstechniken sind:
1. Serialisierung
2. API-Auswahl
3. Vorschubvariable
4. Zwischenspeichern und beibehalten
5. ByKey-Betrieb
6. Auswahl des Dateiformats
7. Garbage-Collection-Tuning
8. Grad der Parallelität
Wann sollten Sie Spark nicht verwenden?
Apache Spark hat viele Anwendungsfälle, aber es gibt bestimmte spezielle Anforderungen, bei denen Sie andere Big-Data-Engines benötigen, um den Zweck zu erfüllen. In solchen Fällen wird empfohlen, anstelle von Spark eine andere Technologie zu verwenden. Nachfolgend sind die Anwendungsfälle aufgeführt, in denen Sie die Verwendung von Spark nicht in Betracht ziehen sollten:
1. Geringe Rechenkapazität – Die Standardverarbeitung auf Apache Spark findet im Clusterspeicher statt. Wenn Ihre virtuellen Maschinen oder Cluster über wenig Rechenkapazität verfügen, sollten Sie zu anderen Alternativen wie Apache Hadoop greifen.
2. Datenaufnahme in einem Publish-Subscribe-Modell – In diesem Fall gibt es mehrere Quellen sowie mehrere Ziele, bei denen Millionen von Daten in kurzer Zeit verschoben werden. Hier sollten Sie nicht auf Spark, sondern auf Apache Kafka zurückgreifen.
Ist Pandas schneller als Apache Spark?
Wenn Sie die Rechengeschwindigkeit von Pandas DataFrame und Spark DataFrame vergleichen, werden Sie feststellen, dass die Leistung von Pandas DataFrame für kleine Datasets geringfügig besser ist. Wenn andererseits die Datengröße zunimmt, stellt sich heraus, dass der Spark DataFrame in der Lage ist, den Pandas DataFrame zu übertreffen. Es hängt also stark von der Datenmenge ab.