Video: Create and Execute MapReduce in Eclipse 2024
Die Art und Weise, wie HDFS eingerichtet wurde, sehr große Dateien in große Blöcke zerlegt (z. B. 128MB). und speichert drei Kopien dieser Blöcke auf verschiedenen Knoten im Cluster.HDFS kennt den Inhalt dieser Dateien nicht.
Wenn ein MapReduce-Job in YARN gestartet wird, wird der Ressourcen-Manager (die Cluster-Ressourcenverwaltung und die Jobplanungseinrichtung)) erstellt einen Application Master-Dämon, der den Lebenszyklus des Jobs überwacht (In Hadoop 1 überwachte der JobTracker einzelne Jobs sowie die Jobplanung und Clusterressourcenverwaltung.)
lokal verarbeitet werden - auf dem Slave-Knoten, auf dem sie gespeichert sind. Bevor Sie sich mit der Verarbeitung der Datenblöcke befassen, müssen Sie sich genauer ansehen, wie Hadoop Daten speichert. In Hadoop bestehen Dateien aus einzelnen Datensätzen, die schließlich von Mapper-Tasks einzeln verarbeitet werden.
Der Beispieldatensatz enthält beispielsweise Informationen über abgeschlossene Flüge innerhalb der Vereinigten Staaten zwischen 1987 und 2008.
Sie haben eine große Datei für jedes Jahr, und jede einzelne Zeile repräsentiert innerhalb jeder Datei einen einzelnen Flug. Mit anderen Worten repräsentiert eine Zeile einen Datensatz. Denken Sie daran, dass die Blockgröße für den Hadoop-Cluster 64 MB beträgt, was bedeutet, dass die Light-Datendateien in Blöcke von genau 64 MB aufgeteilt sind.
Siehst du das Problem? Wenn jede Zuordnungsaufgabe alle Datensätze in einem bestimmten Datenblock verarbeitet, was passiert mit den Datensätzen, die Blockgrenzen überspannen? Dateiblöcke sind genau 64 MB (oder was auch immer Sie für die Blockgröße festlegen), und da HDFS keine Vorstellung davon hat, was sich in den Dateiblöcken befindet, kann es nicht messen, wann ein Datensatz in einen anderen Block überläuft.
Um dieses Problem zu lösen, verwendet Hadoop eine logische Darstellung der in Dateiblöcken gespeicherten Daten, bekannt als
Eingabesplit . Wenn ein MapReduce-Jobclient die Eingabesplits berechnet, wird ermittelt, wo der erste ganze Datensatz in einem Block beginnt und wo der letzte Datensatz im Block endet. In Fällen, in denen der letzte Datensatz in einem Block unvollständig ist, enthält die Eingabespaltung Standortinformationen für den nächsten Block und den Byte-Offset der Daten, die zum Abschließen des Datensatzes erforderlich sind.
Die Abbildung zeigt diese Beziehung zwischen Datenblöcken und Eingabesplits.
Sie können den Application Master-Daemon (oder JobTracker, wenn Sie sich in Hadoop 1 befinden) konfigurieren, um die Eingabesplits anstelle des Jobclients zu berechnen, was für Jobs, die eine große Anzahl von Datenblöcken verarbeiten, schneller wäre.
Die MapReduce-Datenverarbeitung wird von diesem Konzept der Eingabesplits gesteuert. Die Anzahl der Eingabesplits, die für eine bestimmte Anwendung berechnet werden, bestimmt die Anzahl der Mapper-Tasks. Jede dieser Mapper-Tasks wird, wenn möglich, einem Slave-Knoten zugewiesen, auf dem die Eingabespaltung gespeichert ist. Der Resource Manager (oder JobTracker, wenn Sie sich in Hadoop 1 befinden) tut sein Bestes, um sicherzustellen, dass Eingabesplits lokal verarbeitet werden.