2016-08-04 27 views
1

Lesen Sie das Papier über MapReduce und es wird erwähnt, alle Zwischenschlüssel zu gruppieren.Wie kann in MapReduce dieselbe Aufgabe auf mehreren Computern ausgeführt werden?

Wenn ein Arbeiter reduzieren alle Zwischendaten gelesen hat, sortiert sie es durch den Zwischenschlüssel, so dass alle Vorkommen des gleichen Schlüssel zusammen gruppiert sind. Die Sortierung ist erforderlich, weil in der Regel viele verschiedene Schlüssel auf die gleiche Aufgabe zu mappen. Wenn die Menge an Zwischendaten zu groß ist in Speicher zu passen, wird ein externer Art

Früher gab es dort Erwähnung derselben reduzieren Aufgabe wird auf mehreren Maschinen exectued.

Wenn eine reduzierende Aufgabe abgeschlossen ist, benennt der reduce-Mitarbeiter seine temporäretemporäre Ausgabedatei in die endgültige Ausgabedatei um. Wenn die gleiche Task auf mehreren Maschinen ausgeführt wird, werden mehrere Umbenennungsaufrufe für die gleiche endgültige Ausgabedatei ausgeführt.

Wenn die gleichen Schlüssel zusammen gruppiert werden, wird das nicht zu einer Aufgabe, die von einem Mitarbeiter reduziert wird? Wie kann dieselbe Aufgabe auf mehreren Maschinen ausgeführt werden?

Antwort

1

. Wenn dieselbe Reduzierungsaufgabe auf mehreren Maschinen ausgeführt wird, werden mehrere Umbenennungsaufrufe für die gleiche endgültige Ausgabedatei ausgeführt.

Dies ist aufgrund spekulativer Ausführung möglich.

Wenn eine bestimmte Map- oder Reduce-Aufgabe lange dauert, startet Hadoop Framework die gleiche Aufgabe auf einer anderen Maschine, die spekuliert, dass lang andauernde Aufgabe einige Probleme hatte. Die Langsamkeit bei lang andauernden Aufgaben kann durch Netzwerkfehler, viel beschäftigte Maschinen oder fehlerhafte Hardware verursacht werden.

können Sie weitere Details zu diesem Konzept in dieser SE Frage finden:

Hadoop speculative task execution

Von Apache Dokumentation page @ Task-Side-Effect-Dateien:

Es Probleme mit zwei Instanzen sein könnte des gleichen Mappers oder Reducers, der gleichzeitig ausgeführt wird (zum Beispiel spekulative Tasks), um zu versuchen, die gleiche Datei (Pfad) auf dem Dateisystem zu öffnen und/oder zu schreiben. Daher muss der Anwendungs-Schreiber eindeutige Namen pro Task-Versuch auswählen (unter Verwendung der versuchsweise, sagen attempt_200709221812_0001_m_000000_0), nicht nur pro Aufgabe.

Um diese Probleme zu dem MapReduce Framework, zu vermeiden, wenn die OutputCommitter FileOutputCommitter ist, unterhält ein spezielles ${mapreduce.output.fileoutputformat.outputdir}/_temporary/_${taskid} Unterverzeichnis zugänglich über ${mapreduce.task.output.dir} für jeden Aufgabe-Versuch auf dem Dateisystem, wo die Ausgabe des Task-Versuchs gespeichert wird.

1

Ich denke, Sie haben es falsch verstanden. Das bedeutet, wenn eine einzelne Reduzierungsaufgabe groß genug ist, wird sie nicht auf einer einzelnen Maschine verarbeitet, sondern auf mehreren Maschinen verarbeitet. Dann wird die Ausgabedatei der Maschine umbenannt, aggregiert und als einzelne Ausgabedatei dargestellt.

Mehrere Reduzierungsvorgänge können auf demselben Knoten stattfinden. Es hängt von der Geschwindigkeit dieses Knotens ab, wenn es schnell genug ist, um die Aufgabe zu reduzieren, verglichen mit anderen Knoten, wenn ja, dann wird es erneut mit einer anderen Reduzierungsaufgabe gespeist.

Weitere Informationen finden https://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html Es Thema in diesem Dokument ist „wie viele reduziert?“ Ich denke, dass Ihre Abfrage lösen.

Ich hoffe, dass ich Ihre Anfrage lösen kann.

+0

Die gleiche Reduce-Task kann auf mehreren Maschinen ausgeführt werden. –