2012-04-11 3 views
3

Von den folgenden Absätzen von Text-- (http://developer.yahoo.com/hadoop/tutorial/module2.html),Es erwähnt, dass sequentiell lesbare große Dateien nicht für lokale Zwischenspeicherung geeignet sind. aber ich verstehe nicht, was lokal hier bedeutet ...Was bedeutet "lokales Caching von Daten" im Zusammenhang mit diesem Artikel?

Es gibt zwei Annahmen meiner Meinung nach: eine ist Client speichert Daten von HDFS und die andere ist Datanode speichert hdfs Daten in seinem lokalen Dateisystem oder Speicher für Clients zu Zugriff schnell. Gibt es jemanden, der mehr erklären kann? Danke vielmals.


Aber während HDFS sehr skalierbar ist, schränkt seine hohe Performance-Design auch zu einer bestimmte Klasse von Anwendungen; es ist nicht so allgemein wie NFS. Es gibt eine große Anzahl von zusätzlichen Entscheidungen und Kompromisse, die mit HDFS gemacht wurden. Im Einzelnen:

Es wird davon ausgegangen, dass Anwendungen, die HDFS verwenden, lange sequenzielle Streaming-Lesevorgänge aus -Dateien durchführen. HDFS ist optimiert, um Streaming-Leseleistung bereitzustellen; Dies kommt auf Kosten von zufälligen Suchzeiten zu beliebigen Positionen in Dateien.

Daten werden einmal in das HDFS geschrieben und dann mehrmals gelesen; Aktualisierungen an Dateien , nachdem sie bereits geschlossen wurden, werden nicht unterstützt. (Eine Erweiterung auf Hadoop liefert Unterstützung zum Anhang neue Daten zu den Enden von Dateien; es geplant ist, in Hadoop 0.19 enthalten sein soll, aber noch nicht verfügbar.)

Aufgrund der großen Größe von Dateien und die sequenzielle Art der Lesevorgänge, stellt das System keinen Mechanismus für lokale Zwischenspeicherung von Daten. Der Overhead des Caching ist groß genug, , dass Daten einfach erneut aus der HDFS-Quelle gelesen werden sollten.

Es wird angenommen, dass einzelne Maschinen häufig ausfallen, sowohl permanent als auch mit Unterbrechungen. Der Cluster muss in der Lage sein, dem vollständigen Ausfall mehrerer Maschinen zu widerstehen, wobei möglicherweise viele gleichzeitig auftreten (z. B. wenn ein Rack alle zusammen versagt). Während die Leistung proportional zur Anzahl der verlorenen Maschinen abnimmt, sollte das System als nicht zu langsam werden, noch sollten Informationen verloren gehen. Datenreplikation
Strategien bekämpfen dieses Problem.


Antwort

3

Jeder echte Mapreduce-Job wird wahrscheinlich GB (10/100/1000s) von Daten aus HDFS verarbeiten.

Daher wird wahrscheinlich jede Mapper - Instanz sequentiell eine große Menge an Daten verarbeiten (die typische Blockgröße ist 64/128/256 MB je nach Konfiguration) (sie liest die Datei/den Block in

Es ist auch unwahrscheinlich, dass eine andere Mapper-Instanz, die auf demselben Computer ausgeführt wird, diesen Datenblock jederzeit in der nächsten Zukunft erneut verarbeiten möchte, sodass auch mehrere Mapper-Instanzen Daten verarbeiten neben diesem Mapper in einem TaskTracker (hoffentlich mit einigen wenigen "lokalen" bis tatsächlichen physischen Speicherort der Daten, dh ein Replikat des Datenblocks existiert auch auf demselben Rechner, auf dem die Mapper-Instanz läuft).

Aus diesem Grund wird das Zwischenspeichern der aus HDFS gelesenen Daten wahrscheinlich nicht viel gewinnen - Sie werden höchstwahrscheinlich keinen Cache-Treffer für diese Daten erhalten, bevor ein anderer Block abgefragt wird und ihn schließlich in der Datenbank ersetzen wird Zwischenspeicher.

+0

ein Mapper ist hier der Client zu DataNode, so bedeutet das lokale Caching, dass der Mapper Daten aus Hdfs zwischenspeichert, richtig? –

+0

Egal, ob es die Daten auf der Clientseite oder innerhalb des Datenknotenspeichers zwischenspeichert, wird die wahrscheinlich Trefferrate auf einem Cache-Eintrag selten sein, mit einem sehr kurzen ttl im Cache, bevor ein anderer Block es ausstößt –

+0

I Sehen Sie, der Hauptpunkt hier ist, dass keine Art von Caching funktioniert, danke! –

Verwandte Themen