In diesem Hadoop Blog werden wir Ihnen einen End-to-End-Flow für die Ausführung von MapReduce-Jobs bereitstellen. Hier werden wir jede Komponente, die Teil von MapReduce ist, detailliert beschreiben.
Dieser Blog wird Ihnen dabei helfen, zu beantworten, wie Hadoop MapReduce funktioniert, wie Daten in MapReduce fließen, wie MapReduce-Jobs in Hadoop ausgeführt werden?
Was ist MapReduce?
Hadoop MapReduce ist die Datenverarbeitungsschicht. Es verarbeitet die riesige Menge an strukturierten und unstrukturierten Daten, die in HDFS gespeichert sind. MapReduce verarbeitet Daten parallel, indem es den Auftrag in eine Menge unabhängiger Aufgaben aufteilt. Die parallele Verarbeitung verbessert also die Geschwindigkeit und Zuverlässigkeit.
Die Hadoop MapReduce-Datenverarbeitung findet in zwei Phasen statt:Map- und Reduce-Phase.
- Kartenphase- Es ist die erste Phase der Datenverarbeitung. In dieser Phase spezifizieren wir die gesamte komplexe Logik/Geschäftsregeln/kostspieligen Code.
- Reduzierungsphase- Es ist die zweite Phase der Verarbeitung. In dieser Phase spezifizieren wir einfache Verarbeitung wie Aggregation/Summierung.
Schritte des Ablaufs der MapReduce-Jobausführung
MapReduce verarbeitet die Daten in verschiedenen Phasen mit Hilfe verschiedener Komponenten. Lassen Sie uns die Schritte der Auftragsausführung in Hadoop besprechen.
1. Eingabedateien
In Eingabedateien werden Daten für den MapReduce-Job gespeichert. In HDFS , befinden sich Eingabedateien. Das Format der Eingabedateien ist beliebig. Es können auch zeilenbasierte Protokolldateien und Binärformate verwendet werden.
2. Eingabeformat
Danach definiert InputFormat, wie diese Eingabedateien aufgeteilt und gelesen werden. Es wählt die Dateien oder andere Objekte für die Eingabe aus. InputFormat erstellt InputSplit.
3. InputSplits
Es stellt die Daten dar, die von einem einzelnen Mapper verarbeitet werden . Für jede Aufteilung wird eine Kartenaufgabe erstellt. Somit ist die Anzahl der Map-Tasks gleich der Anzahl der InputSplits. Framework in Datensätze aufteilen, die der Mapper verarbeitet.
4. RecordReader
Er kommuniziert mit dem inputSplit. Und wandelt die Daten dann in Schlüssel-Wert-Paare um zum Auslesen durch den Mapper geeignet. RecordReader verwendet standardmäßig TextInputFormat, um Daten in ein Schlüssel-Wert-Paar zu konvertieren.
Es kommuniziert mit dem InputSplit, bis das Lesen der Datei abgeschlossen ist. Es weist jeder in der Datei vorhandenen Zeile einen Byte-Offset zu. Anschließend werden diese Schlüssel-Wert-Paare zur weiteren Verarbeitung an den Mapper gesendet.
5. Mapper
Es verarbeitet den vom RecordReader erzeugten Eingabedatensatz und generiert Zwischenschlüssel-Wert-Paare. Der Zwischenausgang unterscheidet sich vollständig vom Eingangspaar. Die Ausgabe des Mappers ist die vollständige Sammlung von Schlüssel-Wert-Paaren.
Das Hadoop-Framework speichert die Ausgabe des Mappers nicht auf HDFS. Es wird nicht gespeichert, da die Daten temporär sind und beim Schreiben auf HDFS unnötige Mehrfachkopien erstellt werden. Dann leitet Mapper die Ausgabe zur weiteren Verarbeitung an den Combiner weiter.
4. Combiner
Combiner ist ein Mini-Reducer, der eine lokale Aggregation an der Ausgabe des Mappers durchführt. Es minimiert den Datentransfer zwischen Mapper und Reducer. Wenn also die Combiner-Funktionalität abgeschlossen ist, übergibt Framework die Ausgabe an den Partitionierer zur weiteren Verarbeitung.
5. Partitionierer
Partitioner entsteht, wenn wir mit mehr als einem Reducer arbeiten. Es nimmt die Ausgabe des Combiners und führt eine Partitionierung durch.
Die Partitionierung der Ausgabe erfolgt anhand des Schlüssels in MapReduce. Per Hash-Funktion leitet der Schlüssel (oder eine Teilmenge des Schlüssels) die Partition ab.
Auf der Grundlage des Schlüsselwerts in MapReduce findet eine Partitionierung jeder Combiner-Ausgabe statt. Und dann geht der Datensatz mit demselben Schlüsselwert in dieselbe Partition. Danach wird jede Partition an einen Reducer gesendet.
Die Partitionierung in der MapReduce-Ausführung ermöglicht eine gleichmäßige Verteilung der Kartenausgabe über den Reducer.
6. Mischen und Sortieren
Nach der Partitionierung wird die Ausgabe auf den Reduce-Knoten verschoben. Das Mischen ist die physische Bewegung der Daten, die über das Netzwerk erfolgt. Wenn alle Mapper fertig sind und die Ausgabe auf den Reducer-Knoten mischen.
Dann führt Framework diese Zwischenausgabe zusammen und sortiert sie. Dies wird dann als Eingabe bereitgestellt, um die Phase zu reduzieren.
7. Reduzierstück
Reducer nimmt dann als Eingabe eine Reihe von Zwischenschlüssel-Wert-Paaren, die von den Mappern erzeugt werden. Danach wird auf jedem von ihnen eine Reducer-Funktion ausgeführt, um die Ausgabe zu generieren.
Die Ausgabe des Reduzierers ist die endgültige Ausgabe. Dann speichert Framework die Ausgabe auf HDFS.
8. RecordWriter
Es schreibt diese ausgegebenen Schlüssel-Wert-Paare aus der Reducer-Phase in die Ausgabedateien.
9. Ausgabeformat
OutputFormat definiert die Art und Weise, wie RecordReader diese Ausgabe-Schlüssel/Wert-Paare in Ausgabedateien schreibt. Die von Hadoop bereitgestellten Instanzen schreiben also Dateien in HDFS. Daher schreiben OutputFormat-Instanzen die endgültige Ausgabe von Reducer auf HDFS.
Schlussfolgerung
Wir haben Schritt für Schritt gelernt, wie MapReduce-Jobs ausgeführt werden. Ich hoffe, dieser Blog hilft Ihnen sehr dabei, die Funktionsweise von MapReduce zu verstehen.
Wenn Sie dennoch Fragen zum Ausführungsablauf von MapReduce-Jobs haben, können Sie uns diese im Kommentarbereich unten mitteilen. Wir werden unser Bestes geben, um sie zu lösen.