Die Leistungsoptimierung in Hadoop hilft bei der Optimierung der Hadoop-Clusterleistung. In diesem Artikel zur MapReduce-Leistungsoptimierung werden Sie zunächst die verschiedenen Möglichkeiten zur Verbesserung der Hadoop-Clusterleistung und zur Erzielung der besten Ergebnisse bei der MapReduce-Programmierung in Hadoop untersuchen.
Anschließend behandelt der Artikel sieben wichtige Möglichkeiten oder Konzepte für die Leistungsoptimierung von Hadoop MapReduce. Diese Möglichkeiten sind Speicheroptimierung in Hadoop, Verbesserung der IO-Leistung, Zuordnen von Festplattenüberlauf in Hadoop, Optimieren von Mapper- und Reducer-Aufgaben, Schreiben von Combinern, Verwenden von schiefen Joins und spekulative Ausführung.
Diese Techniken können verwendet werden, um Hadoop-Cluster in der Produktion mit handelsüblicher Hardware einzurichten, um die Leistung bei minimalen Betriebskosten zu verbessern.
Einführung in die Leistungsoptimierung von Hadoop MapReduce
Die Installation des Hadoop-Clusters in der Produktion ist nur die halbe Miete. Für den Hadoop-Administrator ist es äußerst wichtig, das Setup des Hadoop-Clusters zu optimieren, um die maximale Leistung zu erzielen.
Die Leistungsoptimierung von Hadoop hilft bei der Optimierung der Leistung von Hadoop-Clustern und erzielt die besten Ergebnisse beim Ausführen von MapReduce-Jobs in Big-Data-Unternehmen.
Während der Hadoop-Installation wird der Hadoop-Cluster mit den Standardkonfigurationseinstellungen konfiguriert.
Es ist sehr wichtig, dass die Hadoop-Administratoren mit den verschiedenen Hardwarespezifikationen wie RAM-Kapazität, der Anzahl der auf den DataNodes montierten Festplatten, der Anzahl der CPU-Kerne, der Anzahl der physischen oder virtuellen Kerne, NIC-Karten usw. vertraut sind. P>
Daher gibt es keine einzelne Technik zur Leistungsoptimierung, die für alle Hadoop-Jobs geeignet ist, da es sehr schwierig ist, ein Gleichgewicht zwischen allen Ressourcen zu erreichen und gleichzeitig das Big-Data-Problem zu lösen.
Wir können die Tipps und Tricks zur Leistungsoptimierung auf der Grundlage der zu verschiebenden Datenmenge und der Art des Hadoop-Jobs auswählen, der in der Produktion ausgeführt werden soll. Das beste und effektivste Performance-Tuning hilft dabei, die maximale Leistung zu erreichen.
Um dasselbe durchzuführen, müssen wir den unten beschriebenen Prozess wiederholen, bis die gewünschte Ausgabe optimal erreicht wird.
Job ausführen –> Engpass identifizieren –> Engpass beheben.
Für die Leistungsoptimierung müssen wir also zunächst den Hadoop MapReduce-Job ausführen, den Engpass identifizieren und das Problem dann mit den folgenden Methoden beheben. Wir müssen den obigen Schritt wiederholen, bis das gewünschte Leistungsniveau erreicht ist.
Tipps und Tricks für die Leistungsoptimierung von MapReduce
Die für die Leistungsoptimierung von Hadoop MapReduce verwendeten Methoden können in zwei Kategorien eingeteilt werden. Diese beiden Kategorien sind:
1. Auf Hadoop-Laufzeitparametern basierende Leistungsoptimierung
2. Hadoop-anwendungsspezifische Leistungsoptimierung
Lassen Sie uns nun diskutieren, wie wir die Leistung des Hadoop-Clusters basierend auf diesen beiden Kategorien verbessern können.
1. Auf Hadoop-Laufzeitparametern basierende Leistungsoptimierung
Diese Kategorie befasst sich mit der Optimierung der Hadoop-Laufzeitparameter wie der Optimierung der CPU-Auslastung, Speicherauslastung, Festplattennutzung und Netzwerknutzung zur Leistungsoptimierung. Die in dieser Kategorie enthaltenen Techniken sind:
a. Speicherabstimmung
Der wichtigste Schritt, um die maximale Leistung eines Hadoop-Jobs sicherzustellen, besteht darin, die Konfigurationsparameter für den Arbeitsspeicher zu optimieren, indem die Arbeitsspeichernutzung auf dem Server überwacht wird.
Jeder MapReduce-Job in Hadoop sammelt die Informationen über die verschiedenen gelesenen Eingabedatensätze, die Anzahl der Reducer-Datensätze, die Anzahl der für die weitere Ausführung gepipelineten Datensätze, den Auslagerungsspeicher, die festgelegte Heap-Größe usw.
Die Hadoop-Aufgaben sind im Allgemeinen nicht an die CPU gebunden. Daher besteht das Hauptanliegen darin, die Speichernutzung und Festplattenüberläufe zu optimieren.
Die beste Faustregel für die Speicheroptimierung zur Maximierung der Leistung besteht darin, sicherzustellen, dass die MapReduce-Jobs keine Auslagerung auslösen. Das bedeutet, dass Sie so viel Speicher wie möglich verwenden, ohne Auslagerungen auszulösen.
Software wie Cloudera Manager, Nagios oder Ganglia können zur Überwachung der Auslagerungsspeichernutzung verwendet werden.
Wann immer es zu einer enormen Auslastung des Swap-Speichers kommt, sollte die Speichernutzung über die Konfiguration der mapred.child.java.opts optimiert werden -Eigenschaft, indem Sie die Menge an RAM reduzieren, die jeder Aufgabe in mapred.child.java.opts zugewiesen ist .
Wir können den Speicher für die Aufgabe anpassen, indem wir die mapred.child.java.opts setzen zu -Xmx2048M in einer mapred-site.xml.
b. Minimieren Sie das Verschütten von Kartendatenträgern
Disk IO ist der Leistungsengpass in Apache Hadoop. Es gab viele Parameter, die wir optimieren konnten, um das Verschütten zu minimieren. Wir können die Parameter wie folgt einstellen:
- Komprimierung der Mapper-Ausgabe
- Stellen Sie sicher, dass der Mapper 70 % des Heap-Speichers für den Spill-Puffer verwendet.
Aber denken Sie, dass häufiges Verschütten wirklich eine gute Idee ist?
Es wird dringend empfohlen, dass Sie nicht mehr als einmal verschütten, denn wenn wir einmal verschütten, müssen wir alle Daten erneut lesen und neu schreiben:3x die IO.
c. Mapper-Aufgaben optimieren
Wir können die Anzahl der Kartenaufgaben implizit festlegen. Die gebräuchlichste und effektivste Methode zur Leistungsoptimierung von Hadoop für den Mapper besteht darin, die Anzahl der Mapper und die Größe jedes Jobs zu steuern.
Beim Umgang mit den großen Dateien teilt das Framework die Datei in kleinere Teile auf, damit der Mapper sie parallel ausführen kann. Die Initialisierung eines neuen Mapper-Jobs dauert jedoch normalerweise einige Sekunden, was ebenfalls ein Overhead ist und minimiert werden muss. Die Vorschläge dafür sind also:
- JVM-Aufgabe wiederverwenden
- Zielen Sie auf die Kartenaufgaben, die jeweils 1 bis 3 Minuten dauern. Wenn also die durchschnittliche Mapper-Laufzeit weniger als eine Minute beträgt, erhöhen Sie die mapred.min.split.size, um weniger Mapper im Slot zuzuweisen und somit den Mapper-Initialisierungs-Overhead zu reduzieren.
- Verwenden Sie das Kombinationsdatei-Eingabeformat für eine Reihe kleinerer Dateien.
2. Hadoop-anwendungsspezifische Leistungsoptimierung
Die in dieser Kategorie enthaltenen Techniken sind:
a. Mapper-Ausgabe minimieren
Durch Minimieren der Mapper-Ausgabe können wir die Leistung verbessern, da die Mapper-Ausgabe sehr empfindlich auf Disk-E/A, Netzwerk-E/A und Speicherempfindlichkeit in der Shuffle-Phase reagiert. Wir können dies erreichen durch:
- Filtern der Datensätze auf der Mapper-Seite statt auf der Reducer-Seite.
- Verwenden von minimalen Daten zum Bilden unseres Mapper-Ausgabeschlüssels und -werts in MapReduce.
- Mapper-Ausgabe komprimieren
b. Balancing Reducer Load
Die unausgeglichenen Reduzierungsaufgaben führen zu Leistungsproblemen. Einige der Reduzierer nehmen den größten Teil der Ausgabe des Mappers auf und laufen im Vergleich zu den anderen Reduzierern extrem lange. Wir können die Belastung des Reduzierers ausgleichen durch:
- Implementieren einer besseren Hash-Funktion in der Partitioner-Klasse.
- Schreiben eines Vorverarbeitungsjobs zum Trennen von Schlüsseln unter Verwendung der mehreren Ausgaben. Verwenden Sie dann einen anderen Map-Reduce-Job, um die Sondertasten zu verarbeiten, die das Problem verursachen können.
c. Reduzieren Sie Zwischendaten mit Combiner in Hadoop
Außerdem können wir die Leistung des Hadoop-Clusters optimieren, indem wir einen Combiner schreiben. Combiner reduziert die zu übertragende Datenmenge vom Mapper zum Reducer. Dies erweist sich als vorteilhaft, da es die Netzwerküberlastung reduziert.
d. Spekulative Ausführung
Die Leistung der MapReduce-Jobs wird ernsthaft beeinträchtigt, wenn die Ausführung der Aufgaben länger dauert. Die spekulative Ausführung in Hadoop ist der übliche Ansatz zur Lösung dieses Problems, indem die langsamen Aufgaben auf den alternativen Computern gesichert werden.
Wir können die spekulative Ausführung aktivieren, indem wir die Konfigurationsparameter ‘mapreduce.map.tasks.speculative.execution’ setzen und ‘mapreduce.reduce.tasks.speculative.execution’ zu wahr. Dadurch wird die Ausführungszeit des Jobs verkürzt.
Zusammenfassung
Schließlich haben wir gesehen, dass die Leistungsoptimierung in Hadoop bei der Optimierung der Leistung von Hadoop-Clustern hilft. Der Artikel erläuterte verschiedene Tipps und Tricks zur Leistungsoptimierung des Hadoop-Clusters.
Der Artikel hat einige der besten und effektivsten Tricks zur Leistungsmaximierung hervorgehoben.
Wenn Sie jedoch Fragen zu diesem Thema haben, können Sie diese gerne im Kommentarbereich mit uns teilen.